package dev.lions.unionflow.client.view;

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

import dev.lions.unionflow.server.api.dto.membre.response.MembreSummaryResponse;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class ComplianceOfficerPickerBeanTest {

  private ComplianceOfficerPickerBean bean;

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

  // ── label ────────────────────────────────────────────────────────────

  @Test
  @DisplayName("label — null → vide")
  void labelNull() {
    assertEquals("", bean.label(null));
  }

  @Test
  @DisplayName("label — Prénom NOM (numéro)")
  void labelComplet() {
    MembreSummaryResponse m = new MembreSummaryResponse();
    m.setPrenom("Jean Pierre");
    m.setNom("dupont");
    m.setNumeroMembre("MBR-2026-0042");
    assertEquals("Jean Pierre DUPONT (MBR-2026-0042)", bean.label(m));
  }

  @Test
  @DisplayName("label — sans numéro membre")
  void labelSansNumero() {
    MembreSummaryResponse m = new MembreSummaryResponse();
    m.setPrenom("Marie");
    m.setNom("Kone");
    assertEquals("Marie KONE", bean.label(m));
  }

  @Test
  @DisplayName("label — uniquement nom")
  void labelNomSeul() {
    MembreSummaryResponse m = new MembreSummaryResponse();
    m.setNom("Diallo");
    assertEquals("DIALLO", bean.label(m));
  }

  @Test
  @DisplayName("label — uniquement prénom")
  void labelPrenomSeul() {
    MembreSummaryResponse m = new MembreSummaryResponse();
    m.setPrenom("Aminata");
    assertEquals("Aminata", bean.label(m));
  }

  @Test
  @DisplayName("label — entité minimaliste sans nom/prénom → fallback id")
  void labelMinimaliste() {
    MembreSummaryResponse m = new MembreSummaryResponse();
    m.setId(java.util.UUID.fromString("00000000-0000-0000-0000-000000000001"));
    String label = bean.label(m);
    assertTrue(label.contains("00000000-0000-0000-0000-000000000001"));
    assertTrue(label.startsWith("(membre"));
  }

  // ── suggest avec query vide/null ──────────────────────────────────────

  @Test
  @DisplayName("suggest — query null → liste vide")
  void suggestNull() {
    // pas besoin de mock REST : retour direct sans appel réseau
    assertTrue(bean.suggest(null).isEmpty());
  }

  @Test
  @DisplayName("suggest — query blank → liste vide")
  void suggestBlank() {
    assertTrue(bean.suggest("   ").isEmpty());
  }

  // ── resoudre id null ──────────────────────────────────────────────────

  @Test
  @DisplayName("resoudre — UUID null → null")
  void resoudreNull() {
    assertNull(bean.resoudre(null));
  }
}
