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

import go.kr.project.carInspectionPenalty.registration.model.CarFfnlgTrgtExcelVO;
import go.kr.project.carInspectionPenalty.registration.model.CarFfnlgTrgtVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

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

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

    /**
     * 과태료 대상 삭제 (논리삭제)
     * @param vo 삭제할 데이터 (carFfnlgTrgtId, dltr)
     * @return 삭제 건수
     */
    int delete(CarFfnlgTrgtVO vo);
    
    /**
     * 차량번호로 중복 체크 (삭제되지 않은 데이터 중)
     * @param vo 조회 조건 (vhclno, inspYmd)
     * @return 존재 개수
     */
    int checkDuplicateVhclno(CarFfnlgTrgtVO vo);

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

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