package incheon.com.file.mapper;

import incheon.com.file.vo.ComFileDtlVO;
import incheon.com.file.vo.ComFileSearchVO;
import incheon.com.file.vo.ComFileVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 공통 파일 매퍼
 * *
 * @since 2025.10.17
 */
@org.egovframe.rte.psl.dataaccess.mapper.Mapper @incheon.com.config.annotation.MainDB public interface ComFileMapper {

    // ================= 파일 그룹 (COM_FILE) =================

    /**
     * 파일 그룹 목록 조회
     */
    List<ComFileVO> selectComFileList(ComFileSearchVO searchVO);

    /**
     * 파일 그룹 목록 총 개수
     */
    int selectComFileListTotCnt(ComFileSearchVO searchVO);

    /**
     * 파일 그룹 상세 조회
     */
    ComFileVO selectComFileDetail(@Param("atchFileId") String atchFileId);

    /**
     * 파일 그룹 등록
     */
    int insertComFile(ComFileVO comFileVO);

    /**
     * 파일 그룹 수정
     */
    int updateComFile(ComFileVO comFileVO);

    /**
     * 파일 그룹 삭제
     */
    int deleteComFile(@Param("atchFileId") String atchFileId);

    /**
     * 임시 파일을 정식 파일로 전환
     */
    int updateComFileConfirm(ComFileVO comFileVO);

    // ================= 파일 상세 (COM_FILE_DTL) =================

    /**
     * 파일 상세 목록 조회
     */
    List<ComFileDtlVO> selectComFileDtlList(@Param("atchFileId") String atchFileId);

    /**
     * 파일 상세 단건 조회
     */
    ComFileDtlVO selectComFileDtlDetail(@Param("fileId") String fileId);

    /**
     * 파일 상세 등록
     */
    int insertComFileDtl(ComFileDtlVO comFileDtlVO);

    /**
     * 파일 상세 수정
     */
    int updateComFileDtl(ComFileDtlVO comFileDtlVO);

    /**
     * 파일 상세 삭제
     */
    int deleteComFileDtl(@Param("fileId") String fileId);

    /**
     * 파일 그룹의 모든 파일 삭제
     */
    int deleteComFileDtlByAtchFileId(@Param("atchFileId") String atchFileId);

    /**
     * 파일 삭제 필요 표시
     */
    int updateComFileDtlDelNeed(ComFileDtlVO comFileDtlVO);

    /**
     * 삭제 필요한 파일 목록 조회 (스케줄러용)
     */
    List<ComFileDtlVO> selectDelNeedComFileDtlList();

    /**
     * 파일 정렬 순서 업데이트
     */
    int updateComFileDtlSortSeq(ComFileDtlVO comFileDtlVO);

    /**
     * 파일 저장 경로 업데이트 (임시→정식 전환 시 사용)
     */
    int updateComFileDtlPath(ComFileDtlVO comFileDtlVO);

    /**
     * 파일 그룹의 다음 정렬 순서 조회
     */
    Integer selectNextFileSortSeq(@Param("atchFileId") String atchFileId);
}