package dev.lions.unionflow.server.api.dto.membre;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * DTO représentant le "compte adhérent" d'un membre de mutuelle/association.
 *
 * <p>Ce compte est une vue agrégée (non persistée en tant que telle) qui regroupe
 * toutes les informations financières du membre :
 * <ul>
 *   <li>Numéro de membre (identifiant lisible, ex : MUF-2026-001)</li>
 *   <li>Solde cotisations (total payé toutes années)</li>
 *   <li>Solde épargne (somme des comptes d'épargne actifs)</li>
 *   <li>Solde total disponible = cotisations + épargne</li>
 *   <li>Encours crédit (prêts en cours, 0 si pas encore implémenté)</li>
 *   <li>Capacité d'emprunt estimée (3× l'épargne — règle mutuelle classique)</li>
 * </ul>
 *
 * @param numeroMembre       Numéro unique du membre sur la plateforme (ex: MUF-2026-001)
 * @param nomComplet         Nom et prénom du membre
 * @param organisationNom    Nom de l'organisation principale (ou null si aucune)
 * @param dateAdhesion       Date d'inscription sur la plateforme
 * @param statutCompte       Statut actuel du compte (ACTIF, SUSPENDU, etc.)
 *
 * @param soldeCotisations   Total des cotisations payées (toutes années confondues)
 * @param soldeEpargne       Solde disponible sur l'ensemble des comptes épargne actifs
 * @param soldeBloque        Montant bloqué (garantie de prêt)
 * @param soldeTotalDisponible soldeCotisations + soldeEpargne - soldeBloque
 * @param encoursCreditTotal Montant total des prêts en cours (0 si fonctionnalité non encore activée)
 * @param capaciteEmprunt    Capacité d'emprunt estimée (3 × soldeEpargne selon règle mutuelle standard)
 *
 * @param nombreCotisationsPayees  Nombre de cotisations payées (historique complet)
 * @param nombreCotisationsTotal   Nombre total de cotisations (payées + en attente + retard)
 * @param nombreCotisationsEnRetard Nombre de cotisations en retard
 * @param tauxEngagement     Taux de paiement global en % (0-100)
 *
 * @param nombreComptesEpargne Nombre de comptes épargne actifs
 * @param dateCalcul         Date/heure du calcul (pour information client)
 *
 * @author UnionFlow Team
 * @version 1.0
 */
public record CompteAdherentResponse(

        // ── Identité ──────────────────────────────────────────────────────────
        String      numeroMembre,
        String      nomComplet,
        String      organisationNom,
        LocalDate   dateAdhesion,
        String      statutCompte,

        // ── Soldes ────────────────────────────────────────────────────────────
        BigDecimal  soldeCotisations,
        BigDecimal  soldeEpargne,
        BigDecimal  soldeBloque,
        BigDecimal  soldeTotalDisponible,
        BigDecimal  encoursCreditTotal,
        BigDecimal  capaciteEmprunt,

        // ── Cotisations ───────────────────────────────────────────────────────
        Integer     nombreCotisationsPayees,
        Integer     nombreCotisationsTotal,
        Integer     nombreCotisationsEnRetard,
        Integer     tauxEngagement,

        // ── Épargne ───────────────────────────────────────────────────────────
        Integer     nombreComptesEpargne,

        // ── Méta ──────────────────────────────────────────────────────────────
        LocalDate   dateCalcul

) implements Serializable {}
