package io.gmss.fiscad.interfaces.infocad.metier;

import io.gmss.fiscad.entities.infocad.metier.Commentaire;
import io.gmss.fiscad.enums.Origine;
import io.gmss.fiscad.exceptions.BadRequestException;
import io.gmss.fiscad.exceptions.NotFoundException;
import io.gmss.fiscad.paylaods.request.SyncCommentaireRequest;
import io.gmss.fiscad.paylaods.response.CommentaireResponse;

import java.util.List;
import java.util.Optional;

public interface CommentaireService {

    Commentaire createCommentaire(Commentaire commentaire) throws BadRequestException;

    Commentaire updateCommentaire(Long id, Commentaire commentaire) throws NotFoundException;

    void deleteCommentaire(Long id) throws NotFoundException;

    List<Commentaire> getCommentairesByEnqueteAndTerminal(Long idEnquete, Long terminalId);

    List<Commentaire> getCommentairesByEnqueteAndLu(Long idEnquete, boolean lu);

    List<Commentaire> getCommentairesByOrigineAndStateReadAndTerminalId(Origine origine, boolean lu, Long terminalId);

    List<Commentaire> getCommentairesByOrigineAndStateSynchronizedAndTerminalId(Origine origine, boolean synchronise, Long terminalId);

    Optional<Commentaire> getCommentaireByNup(String nup);

    List<Commentaire> getCommentaireList();

    Optional<Commentaire> getCommentaireById(Long id);

    boolean setCommentaireRead(Long id);

    List<CommentaireResponse> saveAllCommentairesFromMobile(List<Commentaire> commentaires);

    List<CommentaireResponse> notifySynchronizedDoneFromMobile(List<SyncCommentaireRequest> syncCommentaireRequests);
}
