package dev.lions.unionflow.server.repository;

import dev.lions.unionflow.server.entity.ParametresLcbFt;

import jakarta.enterprise.context.ApplicationScoped;

import java.util.Optional;
import java.util.UUID;

/**
 * Repository pour les paramètres LCB-FT (seuils par organisation ou globaux).
 */
@ApplicationScoped
public class ParametresLcbFtRepository extends BaseRepository<ParametresLcbFt> {

    public ParametresLcbFtRepository() {
        super(ParametresLcbFt.class);
    }

    private static final String CODE_DEVISE_DEFAULT = "XOF";

    /**
     * Récupère le paramètre LCB-FT pour une organisation et une devise.
     * Si aucun paramètre n'existe pour l'organisation, retourne le paramètre global (organisation_id NULL).
     */
    public Optional<ParametresLcbFt> findByOrganisationAndDevise(UUID organisationId, String codeDevise) {
        if (codeDevise == null || codeDevise.isBlank()) {
            codeDevise = CODE_DEVISE_DEFAULT;
        }
        Optional<ParametresLcbFt> byOrg = find("organisation.id = ?1 and codeDevise = ?2 and actif = true", organisationId, codeDevise)
                .firstResultOptional();
        if (byOrg.isPresent()) {
            return byOrg;
        }
        return find("organisation is null and codeDevise = ?1 and actif = true", codeDevise)
                .firstResultOptional();
    }

    /**
     * Récupère le seuil d'obligation d'origine des fonds (XOF par défaut).
     */
    public Optional<java.math.BigDecimal> getSeuilJustification(UUID organisationId, String codeDevise) {
        return findByOrganisationAndDevise(organisationId, codeDevise)
                .map(ParametresLcbFt::getMontantSeuilJustification);
    }
}
