package dev.lions.unionflow.server.repository.mutuelle.credit;

import dev.lions.unionflow.server.entity.mutuelle.credit.DemandeCredit;
import dev.lions.unionflow.server.repository.BaseRepository;
import io.quarkus.arc.Unremovable;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.persistence.TypedQuery;

import java.math.BigDecimal;
import java.util.UUID;


@ApplicationScoped
@Unremovable
public class DemandeCreditRepository extends BaseRepository<DemandeCredit> {

    public DemandeCreditRepository() {
        super(DemandeCredit.class);
    }

    /**
     * Calcule l'encours total de crédit pour un membre (somme des capitaux non encore amortis).
     */
    public BigDecimal calculerTotalEncoursParMembre(UUID membreId) {
        if (membreId == null) return BigDecimal.ZERO;
        
        // On somme l'échéantier non encore payé pour les crédits décaissés ou en contentieux
        TypedQuery<BigDecimal> query = entityManager.createQuery(
                "SELECT COALESCE(SUM(e.capitalAmorti), 0) FROM EcheanceCredit e " +
                "WHERE e.demandeCredit.membre.id = :mid " +
                "AND e.demandeCredit.statut IN ('DECAISSEE', 'EN_CONTENTIEUX') " +
                "AND e.statut != 'PAYEE'", BigDecimal.class);

        query.setParameter("mid", membreId);
        return query.getSingleResult();
    }
}

