package dev.lions.unionflow.client.service;

import dev.lions.unionflow.server.api.dto.document.request.*;
import dev.lions.unionflow.server.api.dto.document.response.*;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import java.util.List;
import java.util.UUID;

/**
 * Service REST Client pour la gestion documentaire
 *
 * @author UnionFlow Team
 * @version 1.0
 */
@RegisterRestClient(configKey = "unionflow-api")
@RegisterClientHeaders(dev.lions.unionflow.client.security.AuthHeaderFactory.class)
@Path("/api/documents")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface DocumentService {

    /**
     * Liste les documents de l'utilisateur connecté
     */
    @GET
    @Path("/mes-documents")
    List<DocumentResponse> mesDocuments();

    /**
     * Crée un nouveau document
     */
    @POST
    DocumentResponse creerDocument(CreateDocumentRequest request);

    /**
     * Trouve un document par son ID
     */
    @GET
    @Path("/{id}")
    DocumentResponse obtenirDocument(@PathParam("id") UUID id);

    /**
     * Enregistre un téléchargement de document
     */
    @POST
    @Path("/{id}/telechargement")
    void enregistrerTelechargement(@PathParam("id") UUID id);

    /**
     * Crée une pièce jointe
     */
    @POST
    @Path("/pieces-jointes")
    PieceJointeResponse creerPieceJointe(CreatePieceJointeRequest request);

    /**
     * Liste toutes les pièces jointes d'un document
     */
    @GET
    @Path("/{documentId}/pieces-jointes")
    List<PieceJointeResponse> listerPiecesJointes(@PathParam("documentId") UUID documentId);
}

