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

import go.kr.project.api.model.CarBassMatterInqireVO;
import go.kr.project.api.model.CarLedgerFrmbkDtlVO;
import go.kr.project.api.model.CarLedgerFrmbkVO;
import go.kr.project.carInspectionPenalty.history.model.VehicleApiHistorySearchVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * packageName    : go.kr.project.carInspectionPenalty.history.mapper
 * fileName       : VehicleApiHistoryMapper
 * author         : 시스템 관리자
 * date           : 2025-11-06
 * description    : 차량 API 조회 이력 Mapper
 * ===========================================================
 * DATE              AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2025-11-06        시스템 관리자             최초 생성
 */
@Mapper
public interface VehicleApiHistoryMapper {

    // ==================== 자동차 기본정보 조회 이력 ====================

    /**
     * 자동차 기본정보 조회 이력 목록을 조회합니다.
     *
     * @param searchVO 검색 조건을 담은 VO 객체
     * @return 자동차 기본정보 조회 이력 목록
     */
    List<CarBassMatterInqireVO> selectCarBassMatterInqireList(VehicleApiHistorySearchVO searchVO);

    /**
     * 자동차 기본정보 조회 이력 목록의 총 개수를 조회합니다.
     *
     * @param searchVO 검색 조건을 담은 VO 객체
     * @return 자동차 기본정보 조회 이력 목록의 총 개수
     */
    int selectCarBassMatterInqireListTotalCount(VehicleApiHistorySearchVO searchVO);

    /**
     * 자동차 기본정보 조회 이력 상세를 조회합니다.
     *
     * @param carBassMatterInqire 자동차 기본 사항 조회 ID
     * @return 자동차 기본정보 조회 이력 상세
     */
    CarBassMatterInqireVO selectCarBassMatterInqireOne(String carBassMatterInqire);

    // ==================== 자동차 등록원부(갑) 조회 이력 ====================

    /**
     * 자동차 등록원부(갑) 조회 이력 목록을 조회합니다.
     *
     * @param searchVO 검색 조건을 담은 VO 객체
     * @return 자동차 등록원부(갑) 조회 이력 목록
     */
    List<CarLedgerFrmbkVO> selectCarLedgerFrmbkList(VehicleApiHistorySearchVO searchVO);

    /**
     * 자동차 등록원부(갑) 조회 이력 목록의 총 개수를 조회합니다.
     *
     * @param searchVO 검색 조건을 담은 VO 객체
     * @return 자동차 등록원부(갑) 조회 이력 목록의 총 개수
     */
    int selectCarLedgerFrmbkListTotalCount(VehicleApiHistorySearchVO searchVO);

    /**
     * 자동차 등록원부(갑) 조회 이력 상세를 조회합니다.
     *
     * @param carLedgerFrmbkId 자동차 등록 원부 갑 ID
     * @return 자동차 등록원부(갑) 조회 이력 상세
     */
    CarLedgerFrmbkVO selectCarLedgerFrmbkOne(String carLedgerFrmbkId);

    // ==================== 자동차 등록원부(갑) 상세 조회 이력 ====================

    /**
     * 자동차 등록원부(갑) 상세 조회 이력 목록을 조회합니다.
     *
     * @param carLedgerFrmbkId 자동차 등록 원부 갑 ID
     * @return 자동차 등록원부(갑) 상세 조회 이력 목록
     */
    List<CarLedgerFrmbkDtlVO> selectCarLedgerFrmbkDtlList(String carLedgerFrmbkId);

    /**
     * 자동차 등록원부(갑) 상세 조회 이력 상세를 조회합니다.
     *
     * @param carLedgerFrmbkDtlId 자동차 등록 원부 갑 상세 ID
     * @return 자동차 등록원부(갑) 상세 조회 이력 상세
     */
    CarLedgerFrmbkDtlVO selectCarLedgerFrmbkDtlOne(String carLedgerFrmbkDtlId);

    /**
     * 차량번호로 최신 자동차 기본정보 조회 이력 ID를 조회합니다.
     *
     * @param vhclno 차량번호
     * @return 자동차 기본 사항 조회 ID
     */
    String selectLatestCarBassMatterInqireIdByVhclno(String vhclno);

    /**
     * 차량번호로 최신 자동차 등록원부(갑) 조회 이력 ID를 조회합니다.
     *
     * @param vhclno 차량번호
     * @return 자동차 등록 원부 갑 ID
     */
    String selectLatestCarLedgerFrmbkIdByVhclno(String vhclno);
}
