package application.service;

import com.banesco.common.domain.model.redis.UserAccountRedis;
import com.banesco.common.infraestructure.helpers.LoggerHelper;
import com.banesco.common.infraestructure.repository.UserAccountRedisRepository;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

@Slf4j
@ApplicationScoped
public class AccountService {

    @Inject
    UserAccountRedisRepository userAccountRedisRepository;

    /**
     * Guarda una lista de cuentas en la caché de Redis y establece un tiempo de expiración (TTL).
     *
     * @param requestId     ID de la solicitud para trazabilidad en los logs.
     * @param id            El identificador único del cliente para la clave del hash.
     * @param sid           El identificador de sesión para la clave del índice.
     * @param accounts      La lista de cuentas a guardar.
     * @param ttlInSeconds  El tiempo de vida (en segundos) para las claves en caché.
     */
    public void saveAccounts(String requestId, String id, String sid, List<UserAccountRedis> accounts, long ttlInSeconds) {
        log.info(LoggerHelper.buildInfoPrivateRequest(requestId, "Iniciando guardado en Redis para el sid", sid));
        if (accounts == null || accounts.isEmpty()) {
            log.warn(LoggerHelper.buildInfoPrivateRequest(requestId, "Se intento guardar una lista de cuentas vacia o nula. No se realiza la operacion."));
            return;
        }

        try {
            userAccountRedisRepository.saveOrUpdate(sid, accounts);
            log.info(LoggerHelper.buildInfoPrivateRequest(requestId, "Guardado exitoso en Redis para el sid", sid));
        } catch (Exception ex) {
            log.error(LoggerHelper.buildError(requestId, String.format("Error al intentar guardar en Redis para el sid %s. %s", sid, ex.getMessage())));
        }
    }

}