package go.kr.project.carInspectionPenalty.registrationOm.mapper;

import go.kr.project.carInspectionPenalty.registrationOm.model.CarFfnlgTrgtIncmpExcelVO;
import go.kr.project.carInspectionPenalty.registrationOm.model.CarFfnlgTrgtIncmpVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 자동차 과태료 대상 미필 Mapper
 */
@Mapper
public interface CarFfnlgTrgtIncmpMapper {
    
    /**
     * 과태료 대상 미필 목록 총 개수 조회
     * @param vo 검색 조건
     * @return 총 개수
     */
    int selectListTotalCount(CarFfnlgTrgtIncmpVO vo);
    
    /**
     * 과태료 대상 미필 목록 조회
     * @param vo 검색 조건
     * @return 목록
     */
    List<CarFfnlgTrgtIncmpVO> selectList(CarFfnlgTrgtIncmpVO vo);
    
    /**
     * 과태료 대상 미필 상세 조회
     * @param vo 조회 조건 (carFfnlgTrgtIncmpId)
     * @return 상세 정보
     */
    CarFfnlgTrgtIncmpVO selectOne(CarFfnlgTrgtIncmpVO vo);
    
    /**
     * 과태료 대상 미필 등록
     * @param vo 등록할 데이터
     * @return 등록 건수
     */
    int insert(CarFfnlgTrgtIncmpVO vo);
    
    /**
     * 과태료 대상 미필 수정
     * @param vo 수정할 데이터
     * @return 수정 건수
     */
    int update(CarFfnlgTrgtIncmpVO vo);

    /**
     * 과태료 대상 미필의 처리상태와 비고만 수정
     * @param vo 수정할 데이터 (carFfnlgTrgtIncmpId, taskPrcsSttsCd, rmrk)
     * @return 수정 건수
     */
    int updateTaskPrcsSttsCdAndRmrk(CarFfnlgTrgtIncmpVO vo);

    /**
     * 과태료 대상 미필 삭제 (논리삭제)
     * @param vo 삭제할 데이터 (carFfnlgTrgtIncmpId, dltr)
     * @return 삭제 건수
     */
    int delete(CarFfnlgTrgtIncmpVO vo);
    
    /**
     * 차량번호와 검사유효기간으로 중복 체크 (삭제되지 않은 데이터 중)
     * @param vo 조회 조건 (vhclno, inspVldPrd)
     * @return 존재 개수
     */
    int checkDuplicateVhclno(CarFfnlgTrgtIncmpVO vo);

    /**
     * 시군구 코드로 시군구명 조회
     * @param sggCd 시군구 코드 (5자리)
     * @return 시군구명
     */
    String selectSggNmBySggCd(String sggCd);

    /**
     * 과태료 대상 미필 목록 엑셀 다운로드용 조회
     * @param vo 검색 조건
     * @return 엑셀 다운로드용 목록
     */
    List<CarFfnlgTrgtIncmpExcelVO> selectListForExcel(CarFfnlgTrgtIncmpVO vo);

    /**
     * 미필 부과일자 가산일 조회 (OM_DAY_CD 코드의 D값)
     * @return 가산일 (예: 146)
     */
    String selectOmDayPlusDay();
}
