package dev.lions.unionflow.server.repository;

import dev.lions.unionflow.server.api.enums.membre.NiveauRisqueKyc;
import dev.lions.unionflow.server.api.enums.membre.StatutKyc;
import dev.lions.unionflow.server.entity.KycDossier;
import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
import jakarta.enterprise.context.ApplicationScoped;

import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

@ApplicationScoped
public class KycDossierRepository implements PanacheRepositoryBase<KycDossier, UUID> {

    public Optional<KycDossier> findDossierActifByMembre(UUID membreId) {
        return find("membre.id = ?1 AND actif = true", membreId).firstResultOptional();
    }

    public List<KycDossier> findByMembre(UUID membreId) {
        return find("membre.id = ?1 ORDER BY dateCreation DESC", membreId).list();
    }

    public List<KycDossier> findByStatut(StatutKyc statut) {
        return find("statut = ?1 AND actif = true", statut).list();
    }

    public List<KycDossier> findByNiveauRisque(NiveauRisqueKyc niveauRisque) {
        return find("niveauRisque = ?1 AND actif = true ORDER BY scoreRisque DESC", niveauRisque).list();
    }

    public List<KycDossier> findPep() {
        return find("estPep = true AND actif = true").list();
    }

    public List<KycDossier> findPiecesExpirantsAvant(LocalDate date) {
        return find("dateExpirationPiece <= ?1 AND actif = true ORDER BY dateExpirationPiece ASC", date).list();
    }

    public long countByStatut(StatutKyc statut) {
        return count("statut = ?1 AND actif = true", statut);
    }

    public long countPepActifs() {
        return count("estPep = true AND actif = true");
    }

    public List<KycDossier> findByAnnee(int anneeReference) {
        return find("anneeReference = ?1", anneeReference).list();
    }
}
