package dev.lions.unionflow.server.scheduler;

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

import java.time.LocalDate;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class RapportTrimestrielSchedulerTest {

  @Test
  @DisplayName("trimestrePrecedent — 1er avril → T1 année courante")
  void trimestrePrecedent_1avril() {
    var t = RapportTrimestrielScheduler.trimestrePrecedent(LocalDate.of(2026, 4, 1));
    assertThat(t.annee()).isEqualTo(2026);
    assertThat(t.trimestre()).isEqualTo(1);
  }

  @Test
  @DisplayName("trimestrePrecedent — 1er juillet → T2 année courante")
  void trimestrePrecedent_1juillet() {
    var t = RapportTrimestrielScheduler.trimestrePrecedent(LocalDate.of(2026, 7, 1));
    assertThat(t.annee()).isEqualTo(2026);
    assertThat(t.trimestre()).isEqualTo(2);
  }

  @Test
  @DisplayName("trimestrePrecedent — 1er octobre → T3 année courante")
  void trimestrePrecedent_1octobre() {
    var t = RapportTrimestrielScheduler.trimestrePrecedent(LocalDate.of(2026, 10, 1));
    assertThat(t.annee()).isEqualTo(2026);
    assertThat(t.trimestre()).isEqualTo(3);
  }

  @Test
  @DisplayName("trimestrePrecedent — 1er janvier → T4 année précédente")
  void trimestrePrecedent_1janvier_anneePrecedente() {
    var t = RapportTrimestrielScheduler.trimestrePrecedent(LocalDate.of(2026, 1, 1));
    assertThat(t.annee()).isEqualTo(2025);
    assertThat(t.trimestre()).isEqualTo(4);
  }

  @Test
  @DisplayName("trimestrePrecedent — milieu de trimestre = trimestre du mois précédent")
  void trimestrePrecedent_milieu() {
    // 15 mai 2026 → mois précédent = avril → T2
    var t = RapportTrimestrielScheduler.trimestrePrecedent(LocalDate.of(2026, 5, 15));
    assertThat(t.annee()).isEqualTo(2026);
    assertThat(t.trimestre()).isEqualTo(2);
  }
}
