package dev.lions.unionflow.client.service;

import dev.lions.unionflow.client.security.AuthHeaderFactory;
import dev.lions.unionflow.server.api.dto.kyc.request.CreateBeneficiaireEffectifRequest;
import dev.lions.unionflow.server.api.dto.kyc.request.UpdateBeneficiaireEffectifRequest;
import dev.lions.unionflow.server.api.dto.kyc.response.BeneficiaireEffectifResponse;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.DELETE;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.PUT;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;
import java.util.List;
import java.util.UUID;
import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;

/**
 * Client REST des Bénéficiaires Effectifs (Sprint 11 ⇄ backend Sprint 10).
 * Réutilise les DTOs officiels de unionflow-server-api 1.0.8 — zéro duplication.
 */
@RegisterRestClient(configKey = "unionflow-api")
@RegisterClientHeaders(AuthHeaderFactory.class)
@Path("/api/kyc/beneficiaires-effectifs")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface BeneficiaireEffectifRestClient {

  @GET
  List<BeneficiaireEffectifResponse> lister(
      @QueryParam("kycDossierId") UUID kycDossierId,
      @QueryParam("organisationCibleId") UUID organisationCibleId,
      @QueryParam("pep") Boolean pep);

  @GET
  @Path("/{id}")
  BeneficiaireEffectifResponse trouverParId(@PathParam("id") UUID id);

  @POST
  BeneficiaireEffectifResponse creer(CreateBeneficiaireEffectifRequest request);

  @PUT
  @Path("/{id}")
  BeneficiaireEffectifResponse mettreAJour(
      @PathParam("id") UUID id, UpdateBeneficiaireEffectifRequest request);

  @DELETE
  @Path("/{id}")
  void desactiver(@PathParam("id") UUID id);
}
