package cokr.xit.fims.crdn.service;

import java.util.List;

import cokr.xit.fims.cmmn.ftp.RemoteSystemInfo;
import cokr.xit.fims.crdn.CrdnQuery;
import cokr.xit.fims.crdn.ExmptnVhcl;
import cokr.xit.fims.crdn.Team;
import cokr.xit.fims.crdn.receive.eqpmnt.LayoutDescriptor;
import cokr.xit.foundation.data.DataObject;

public interface CrdnStngService {

	/** 연계파일 레이아웃 목록을 조회한다.
	 * @param query 조회조건
	 * @return 연계파일 레이아웃 목록
	 */
	List<DataObject> getLinkFileLayoutMetadataList(CrdnQuery query);

	/** 연계파일 레이아웃 상세정보를 조회한다.
	 * @param fileLayoutId 파일 레이아웃 ID
	 * @return 연계파일 레이아웃 상세정보
	 */
	DataObject getLinkFileLayoutMetadataInfo(String fileLayoutId);

	/** 연계파일 레이아웃 정보를 등록한다.
	 * @param layoutDescriptor 레이아웃 정보, remoteSystemInfo 파일연계 원격시스템 정보
	 * @return 결과메시지
	 */
	String createLinkFileLayoutMetadata(LayoutDescriptor layoutDescriptor, RemoteSystemInfo remoteSystemInfo);

	/** 연계파일 레이아웃 정보를 수정한다.
	 * @param layoutDescriptor 레이아웃 정보, remoteSystemInfo 파일연계 원격시스템 정보
	 * @return 결과메시지
	 */
	String updateLinkFileLayoutMetadata(LayoutDescriptor layoutDescriptor, RemoteSystemInfo remoteSystemInfo);

	/** 연계파일 레이아웃 정보를 삭제한다.
	 * @param fileLayoutId 파일 레이아웃 ID
	 * @return 결과메시지
	 */
	String removeLinkFileLayoutMetadata(String fileLayoutId);

	/** 연계파일 레이아웃 엔티티 목록을 조회한다.
	 * @param sggCd 시군구코드, taskSeCd 과태료구분, instCd 기관코드, deptCd 부서코드
	 * @return 연계파일 레이아웃 정보
	 */
	List<LayoutDescriptor> getLinkFileLayoutMetadata(String sggCd, String taskSeCd, String instCd, String deptCd);

	/** 단속팀 목록을 조회한다.
	 * @param query 단속팀 목록 조회 조건
	 * @return 단속팀 목록
	 */
	List<DataObject> getTeamList(CrdnQuery query);

	/** 비사용 단속팀 목록을 조회한다.
	 * @param query 비사용 단속팀 목록 조회 조건
	 * @return 비사용 단속팀 목록
	 */
	List<DataObject> getRemovedTeamList(CrdnQuery query);

	/** 단속팀 정보를 삭제한다.
	 * @param teamId 단속팀 ID
	 * @return 저장여부
	 */
	String removeTeamInfo(String teamId);

	/** 단속팀 정보를 저장한다.
	 * @param team 단속팀 정보
	 * @return 저장여부
	 */
	String saveTeamInfo(Team team);

	/** 단속팀 정보을 조회한다.
	 * @param teamId 단속팀 ID
	 * @return 단속팀 정보
	 */
	DataObject getTeamInfo(String teamId);

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

	/** 면제차량 정보을 조회한다.
	 * @param exemptionVehicleId 면제차량 ID
	 * @return 면제차량 정보
	 */
	DataObject getExemptionVehicleInfo(String exemptionVehicleId);

	/** 면제차량 정보를 등록한다.
	 * @param exmptnVhcl 면제차량 정보
	 * @return 저장여부
	 */
	String createExemptionVehicleInfo(ExmptnVhcl exmptnVhcl);

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

	/** 면제차량 정보를 삭제한다.
	 * @param exmptnVhcl 면제차량 정보
	 * @return 저장여부
	 */
	String removeExemptionVehicleInfo(ExmptnVhcl exmptnVhcl);

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

}
