package cokr.xit.fims.crdn.dao;

import java.util.List;

import org.egovframe.rte.psl.dataaccess.mapper.Mapper;

import cokr.xit.fims.crdn.Crdn;
import cokr.xit.fims.crdn.CrdnQuery;
import cokr.xit.fims.crdn.ExmptnVhcl;
import cokr.xit.foundation.component.AbstractMapper;
import cokr.xit.foundation.data.DataObject;

@Mapper("exmptnVhclMapper")
public interface ExmptnVhclMapper extends AbstractMapper {
	List<DataObject> selectExemptedCrdns(List<Crdn> crdns);

	/**면제차량 목록을 조회한다.<br />
	 * @param query 면제차량 목록 조회 조건
	 * @return 면제차량 목록
	 */
	List<DataObject> selectExemptionVehicleList(CrdnQuery query);

	/**면제차량 정보를 조회한다.<br />
	 * @param exemptionVehicleId 면제차량 ID
	 * @return 면제차량 정보
	 */
	DataObject selectExemptionVehicleInfo(String exemptionVehicleId);

	default boolean insert(ExmptnVhcl exmptnVhcl) {
		return insertExemptionVehicleInfo(exmptnVhcl) == 1
			&& insertExemptionVehicleHistory(exmptnVhcl) == 1;
	}

	/**면제차량 정보를 등록한다.
	 * @param exmptnVhcl 면제차량 정보
	 * return 저장된 정보 수
	 */
	int insertExemptionVehicleInfo(ExmptnVhcl exmptnVhcl);

	default boolean update(ExmptnVhcl exmptnVhcl) {
		return updateExemptionVehicleInfo(exmptnVhcl) == 1
			&& insertExemptionVehicleHistory(exmptnVhcl) == 1;
	}

	/**면제차량 정보를 수정한다.
	 * @param exmptnVhcl 면제차량 정보
	 * return 저장된 정보 수
	 */
	int updateExemptionVehicleInfo(ExmptnVhcl exmptnVhcl);

	default boolean delete(ExmptnVhcl exmptnVhcl) {
		exmptnVhcl.setRemovedBy(currentUser().getId());
		return deleteExemptionVehicleInfo(exmptnVhcl) == 1
			&& insertExemptionVehicleHistory(exmptnVhcl) == 1;
	}

	/**면제차량 정보를 삭제한다.
	 * @param exmptnVhcl 면제차량 정보
	 * return 저장된 정보 수
	 */
	int deleteExemptionVehicleInfo(ExmptnVhcl exmptnVhcl);

	/**면제차량 이력을 등록한다.
	 * @param exmptnVhcl 면제차량 정보
	 * return 저장된 정보 수
	 */
	int insertExemptionVehicleHistory(ExmptnVhcl exmptnVhcl);

	/**면제차량 이력을 조회한다.<br />
	 * @param exemptionVehicleId 면제차량 ID
	 * @return 면제차량 이력
	 */
	List<DataObject> selectExemptionVehicleHistoryList(String exmptnVhclId);
}