package io.gmss.fiscad.interfaces.synchronisation;

import io.gmss.fiscad.entities.infocad.metier.Upload;
import io.gmss.fiscad.entities.metadata.MobileDataUpload;
import io.gmss.fiscad.paylaods.request.*;
import io.gmss.fiscad.paylaods.response.ReferencesSyncResponses;
import io.gmss.fiscad.paylaods.response.SyncEnqueteAllDataResponse;
import io.gmss.fiscad.paylaods.response.SyncResponse;
import io.gmss.fiscad.paylaods.response.UserDecoupageSyncResponses;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;


public interface SynchronisationService {
    public UserDecoupageSyncResponses getDecoupageAdminUserConnecter();

    public ReferencesSyncResponses getReferencesSyncResponses();

    public SyncEnqueteAllDataResponse syncEnqueteAllData(EnqueteAllDataPayload enqueteAllDataPayload);

    public List<SyncResponse> syncPersonnes(List<PersonnePayLoad> personnePayLoads);

    public List<SyncResponse> syncBatiment(List<BatimentPaylaod> batimentPaylaods);

    public List<SyncResponse> syncUniteLogement(List<UniteLogementPaylaod> uniteLogementPaylaods);

    public List<SyncResponse> syncCaracteristiqueBatiment(List<CaracteristiqueBatimentPaylod> caracteristiqueBatimentPaylods);

    public List<SyncResponse> syncCaracteristiqueParcelle(List<CaracteristiqueParcellePaylod> caracteristiqueParcellePaylods);

    public List<SyncResponse> syncCaracteristiqueUniteLogement(List<CaracteristiqueUniteLogementPaylod> caracteristiqueUniteLogementPaylods);

    public List<SyncResponse> syncMembreGroupe(List<MembreGroupePayLoad> membreGroupePayLoads);

    public List<SyncResponse> syncEnquete(List<EnquetePayLoad> enquetePayLoads);

    public List<SyncResponse> syncEnqueteBatiment(List<EnqueteBatimentPayload> enquetebatimentPayLoads);

    public List<SyncResponse> syncEnqueteUniteLogement(List<EnqueteUniteLogementPayload> enqueteUniteLogementPayloads);

    public List<SyncResponse> syncParcelle(List<ParcellePayLoad> parcellePayLoads);

    public List<SyncResponse> syncPiece(List<PiecePayLoad> piecePayLoads);

    public List<SyncResponse> syncActeurConcerne(List<ActeurConcernePayLoad> acteurConcernePayLoads);

    public SyncResponse syncFiles(MultipartFile file,
                                  Long idBackend,
                                  Long externalKey,
                                  Long pieceId,
                                  Long membreGroupeId,
                                  Long terminalId,
                                  String name,
                                  String filePath,
                                  Long max_numero_piece_id,
                                  Long max_numero_upload_id,
                                  Long max_numero_acteur_concerne_id,
                                  Long enqueteId,
                                  Long enqueteBatimentId,
                                  Long enqueteUniteLogementId,
                                  Long personneId
    );

    public List<SyncResponse> syncEnqueteFromMobile(List<Long> idEnquete);
    public void traitementTableRelationnelle(Long terminalId);
  //  public Upload getUploadFromUplaodPayLoad(Upload upload, MobileDataUpload mobileDataUpload);
}