package dev.lions.unionflow.server.client;

import dev.lions.user.manager.dto.user.UserDTO;
import dev.lions.user.manager.dto.user.UserSearchCriteriaDTO;
import dev.lions.user.manager.dto.user.UserSearchResultDTO;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;

/**
 * REST Client pour le service de gestion des utilisateurs Keycloak
 * via lions-user-manager API
 *
 * Configuration dans application.properties:
 * quarkus.rest-client.lions-user-manager-api.url=http://localhost:8081
 */
@Path("/api/users")
@RegisterRestClient(configKey = "lions-user-manager-api")
@RegisterClientHeaders(OidcTokenPropagationHeadersFactory.class)
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public interface UserServiceClient {

    /**
     * Rechercher des utilisateurs selon des critères
     */
    @POST
    @Path("/search")
    UserSearchResultDTO searchUsers(UserSearchCriteriaDTO criteria);

    /**
     * Récupérer un utilisateur par ID
     */
    @GET
    @Path("/{userId}")
    UserDTO getUserById(
            @PathParam("userId") String userId,
            @QueryParam("realm") String realmName);

    /**
     * Créer un nouvel utilisateur
     */
    @POST
    UserDTO createUser(
            UserDTO user,
            @QueryParam("realm") String realmName);

    /**
     * Mettre à jour un utilisateur
     */
    @PUT
    @Path("/{userId}")
    UserDTO updateUser(
            @PathParam("userId") String userId,
            UserDTO user,
            @QueryParam("realm") String realmName);

    /**
     * Supprimer un utilisateur
     */
    @DELETE
    @Path("/{userId}")
    void deleteUser(
            @PathParam("userId") String userId,
            @QueryParam("realm") String realmName);

    /**
     * Envoyer un email de vérification
     */
    @POST
    @Path("/{userId}/send-verification-email")
    void sendVerificationEmail(
            @PathParam("userId") String userId,
            @QueryParam("realm") String realmName);

}
