package com.kamco.cd.kamcoback.postgres.repository.mapsheet;

import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto;
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.YearSearchReq;
import com.kamco.cd.kamcoback.postgres.entity.MapSheetMngHstEntity;
import com.kamco.cd.kamcoback.postgres.entity.YearEntity;
import jakarta.validation.Valid;
import java.util.List;
import java.util.Optional;
import org.springframework.data.domain.Page;

public interface MapSheetMngRepositoryCustom {

  List<MapSheetMngDto.MngDto> findMapSheetMngList();

  List<Integer> findMapSheetMngYyyyList();

  MapSheetMngDto.MngDto findMapSheetMng(int mngYyyy);

  void MapSheetMngComplete(int mngYyyy);

  Optional<MapSheetMngHstEntity> findMapSheetMngHstInfo(Long hstUid);

  int insertMapSheetOrgDataToMapSheetMngHst(int mngYyyy, String mngPath);

  List<MapSheetMngDto.MngFilesDto> findHstUidToMapSheetFileList(Long hstUid);

  void deleteByFileUidMngFile(Long fileUid);

  MapSheetMngDto.MngFilesDto findYyyyToMapSheetFilePathRefer(int mngYyyy);

  void deleteByMngYyyyMngAll(int mngYyyy);

  void deleteByMngYyyyMng(int mngYyyy);

  void deleteByMngYyyyMngHst(int mngYyyy);

  void deleteByMngYyyyMngFile(int mngYyyy);

  void deleteByHstUidMngFile(Long hstUid);

  void mngFileSave(@Valid MapSheetMngDto.MngFileAddReq addReq);

  void updateMapSheetMngHstSyncCheckState(MapSheetMngDto.SyncCheckStateReqUpdateDto updReq);

  void updateByHstUidMngFileState(Long hstUid, String fileState);

  void updateByFileUidMngFileState(Long fileUid, String fileState);

  void deleteByNotInFileUidMngFile(Long hstUid, List<Long> fileUids);

  void updateYearState(int yyyy, String status);

  Page<MapSheetMngDto.ErrorDataDto> findMapSheetErrorList(
      MapSheetMngDto.@Valid ErrorSearchReq searchReq);

  MapSheetMngDto.ErrorDataDto findMapSheetError(Long hstUid);

  List<MapSheetMngDto.MngFilesDto> findByHstUidMapSheetFileList(Long hstUid);

  MapSheetMngDto.MngFilesDto findByFileUidMapSheetFile(Long fileUid);

  void updateHstFileSizes(Long hstUid, long tifSizeBytes, long tfwSizeBytes, long totalSizeBytes);

  int findByYearFileNameFileCount(int mngYyyy, String fileName);

  Page<YearEntity> getYears(YearSearchReq req);
}
