package dev.lions.unionflow.server.entity;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.math.BigDecimal;

import static org.assertj.core.api.Assertions.assertThat;

/**
 * Tests de couverture complémentaires pour DemandeAdhesion.
 * Couvre les branches manquantes de isPayeeIntegralement().
 */
@DisplayName("DemandeAdhesion - couverture complémentaire")
class DemandeAdhesionCoverageTest {

    @Test
    @DisplayName("isPayeeIntegralement retourne false quand montantPaye est null")
    void isPayeeIntegralement_nullMontantPaye_returnsFalse() {
        DemandeAdhesion d = new DemandeAdhesion();
        d.setFraisAdhesion(new BigDecimal("5000.00"));
        d.setMontantPaye(null);
        assertThat(d.isPayeeIntegralement()).isFalse();
    }

    @Test
    @DisplayName("isPayeeIntegralement retourne true quand montantPaye > fraisAdhesion (overpayment)")
    void isPayeeIntegralement_overpayment_returnsTrue() {
        DemandeAdhesion d = new DemandeAdhesion();
        d.setFraisAdhesion(new BigDecimal("5000.00"));
        d.setMontantPaye(new BigDecimal("6000.00"));
        assertThat(d.isPayeeIntegralement()).isTrue();
    }

    @Test
    @DisplayName("isPayeeIntegralement retourne true quand fraisAdhesion est zero et montantPaye est zero")
    void isPayeeIntegralement_zeroFraisZeroMontant_returnsTrue() {
        DemandeAdhesion d = new DemandeAdhesion();
        d.setFraisAdhesion(BigDecimal.ZERO);
        d.setMontantPaye(BigDecimal.ZERO);
        assertThat(d.isPayeeIntegralement()).isTrue();
    }

    @Test
    @DisplayName("isPayeeIntegralement retourne false quand les deux champs sont null")
    void isPayeeIntegralement_bothNull_returnsFalse() {
        DemandeAdhesion d = new DemandeAdhesion();
        d.setFraisAdhesion(null);
        d.setMontantPaye(null);
        assertThat(d.isPayeeIntegralement()).isFalse();
    }

    @Test
    @DisplayName("isEnAttente retourne false pour statut ANNULEE")
    void isEnAttente_annulee_returnsFalse() {
        DemandeAdhesion d = new DemandeAdhesion();
        d.setStatut("ANNULEE");
        assertThat(d.isEnAttente()).isFalse();
        assertThat(d.isApprouvee()).isFalse();
        assertThat(d.isRejetee()).isFalse();
    }
}
