package dev.lions.unionflow.client.view;

import static org.junit.jupiter.api.Assertions.assertEquals;

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

class AuditTrailViewerBeanTest {

  private AuditTrailViewerBean bean;

  @BeforeEach
  void setUp() {
    bean = new AuditTrailViewerBean();
  }

  @Test
  @DisplayName("getCouleurAction — DELETE → danger")
  void couleurDelete() {
    assertEquals("danger", bean.getCouleurAction("DELETE"));
    assertEquals("danger", bean.getCouleurAction("PAYMENT_FAILED"));
  }

  @Test
  @DisplayName("getCouleurAction — VALIDATE / payment confirmé / aide approuvée → success")
  void couleurSuccess() {
    assertEquals("success", bean.getCouleurAction("VALIDATE"));
    assertEquals("success", bean.getCouleurAction("PAYMENT_CONFIRMED"));
    assertEquals("success", bean.getCouleurAction("AID_REQUEST_APPROVED"));
  }

  @Test
  @DisplayName("getCouleurAction — UPDATE / payment initié / budget approuvé → info")
  void couleurInfo() {
    assertEquals("info", bean.getCouleurAction("UPDATE"));
    assertEquals("info", bean.getCouleurAction("PAYMENT_INITIATED"));
    assertEquals("info", bean.getCouleurAction("BUDGET_APPROVED"));
  }

  @Test
  @DisplayName("getCouleurAction — CREATE → primary")
  void couleurCreate() {
    assertEquals("primary", bean.getCouleurAction("CREATE"));
  }

  @Test
  @DisplayName("getCouleurAction — EXPORT → warning")
  void couleurExport() {
    assertEquals("warning", bean.getCouleurAction("EXPORT"));
  }

  @Test
  @DisplayName("getCouleurAction — null/inconnu → secondary")
  void couleurDefault() {
    assertEquals("secondary", bean.getCouleurAction(null));
    assertEquals("secondary", bean.getCouleurAction("AUTRE"));
  }

  @Test
  @DisplayName("getCouleurSod — true → success, false → danger, null → secondary")
  void couleurSod() {
    assertEquals("success", bean.getCouleurSod(true));
    assertEquals("danger", bean.getCouleurSod(false));
    assertEquals("secondary", bean.getCouleurSod(null));
  }

  @Test
  @DisplayName("Defaults — mode = ORG, plage = 30 derniers jours")
  void defaults() {
    assertEquals("ORG", bean.getMode());
    // plage from 30 jours avant maintenant — vérifié pas null
    org.junit.jupiter.api.Assertions.assertNotNull(bean.getFrom());
    org.junit.jupiter.api.Assertions.assertNotNull(bean.getTo());
  }
}
