package cokr.xit.fims.cvlc.service;

import java.util.List;
import java.util.Map;

import cokr.xit.base.file.FileInfo;
import cokr.xit.fims.crdn.Crdn;
import cokr.xit.fims.crdn.CrdnQuery;
import cokr.xit.fims.cvlc.CrdnCvlcpt;
import cokr.xit.foundation.data.DataObject;

public interface CrdnCvlcptService {

	/** 민원 목록을 조회한다.
	 * @param query 조회 요청
	 * @return 민원 목록
	 */
	List<DataObject> getCivilComplaintList(CrdnQuery query);

	/** 민원접수 초기자료 상세정보를 조회한다.
	 * @param query 조회 요청
	 * @return 민원초기자료 정보
	 */
	DataObject getCivilComplaintReceiptInitialDataInfo(CrdnQuery query);

	/** 지정한 민원자료의 원본 상세정보를 조회한다.
	 * @param query 조회 요청
	 * @return 민원원본정보
	 */
	DataObject getCivilComplaintOriginalInfo(CrdnQuery query);

	/** 지정한 민원자료의 답변 미리보기 정보를 조회한다.
	 * @param query 조회 요청
	 * @return 민원 답변 정보
	 */
	DataObject getAnswerPreview(CrdnQuery query);

	/** 한글 서식 출력물을 생성한다.
	 * @param query 출력 요청
	 * @return map 출력 요청 결과
	 * <ul><li>filePath: 결과 파일 경로</li>
	 *     <li>fileName: 다운로드 파일명</li>
	 * </ul>
	 */
	Map<String, String> makeFileFromHwpFormat(CrdnQuery query);

	/** 민원 자료에 대해 반송(회수)처리한다.
	 * @param crdnID 단속ID
	 * @return 저장여부
	 */
	boolean sendBackCivilComplaintInfo(String crdnId);

	/** 부과요청 민원에 대한 수용 처리구분을 변경한다.
	 * @param nonQueryRequest 처리 요청, crdnCvlcpt 단속민원정보, crdn 단속정보, newFileInfoList 업로드 파일 목록
	 * @return 저장여부
	 */
	boolean updateCvlcptProcessSection(Map<String, Object> nonQueryRequest, CrdnCvlcpt crdnCvlcpt, Crdn crdn, List<FileInfo> newFileInfoList);

	/** 단속민원 자료를 복사하여 신규단속자료를 생성한다.
	 * @param crdnId 단속 ID
	 * @return 저장여부
	 */
	boolean copyCvlcptCrdnInfo(String crdnId);

	/** 단속민원의 답변내용을 변경한다.
	 * @param crdnCvlcpt 단속민원정보
	 * @return 저장여부
	 */
	boolean updateAnswerContent(CrdnCvlcpt crdnCvlcpt);

	/** 민원답변대상의 처리 상태를 변경한다.
	 * @param processType 처리 유형, crdnIDs 단속ID목록
	 * @return 저장여부
	 */
	boolean updateAnswerTargetProcessStatus(String processType, String currentUserInstitute, String currentUserAcnt, String[] crdnIDs);

	/** 민원답변 문구 설정 정보를 조회한다.
	 * @param crdnQuery 조회 조건
	 * @return map 민원답변 문구 설정 정보
	 * <ul><li>basic: 기본 문구</li>
	 *     <li>levyCaseList: </li>
	 *     <li>warningCaseList: </li>
	 *     <li>nonlevyCaseList: </li>
	 * </ul>
	 */
	Map<String, Object> getCvlcptAnswerWordsInfo(CrdnQuery crdnQuery);

	/** 민원답변 문구 설정 정보를 저장한다.
	 * @param saveData 저장 자료 구분, crdnCvlcpt 민원 답변 문구 설정
	 * @return 저장여부
	 */
	boolean saveAnswerWordsInfo(String saveData, CrdnCvlcpt crdnCvlcpt);

	/** 미부과처리건 답변내용을 삭제한다.
	 * @param ansWordsId 답변 문구 ID
	 * @return 저장여부
	 */
	boolean removeCvlcptAnswerWordsInfo(String ansWordsId);

	/** 계도문 문구 설정 정보를 조회한다.
	 * @param crdnQuery 조회 조건
	 * @return 계도문 문구 설정 정보
	 */
	List<DataObject> getWarningWordsList(CrdnQuery crdnQuery);

	/** 계도문 문구 설정 정보를 저장한다.
	 * @param crdnCvlcpt 계도문 문구 설정
	 * @return 저장여부
	 */
	boolean saveWarningWordsInfo(CrdnCvlcpt crdnCvlcpt);

	/** 새올 요청자료 목록을 조회한다.
	 * @param query 조회 요청
	 * @return 새올 요청자료 목록
	 */
	List<DataObject> getDmndDataList(CrdnQuery query);

	/** 새올 요청자료를 생성한다.
	 * @param crdnCvlcpt 새올요청자료 정보
	 * @return 저장여부
	 */
	boolean createDmndDataInfo(CrdnCvlcpt crdnCvlcpt);

	/** 새올 요청자료를 삭제한다.
	 * @param indivIDs 개별요청 ID
	 * @return 저장여부
	 */
	boolean removeDmndDataInfo(String... indivIDs);

	/** 지정한 단속자료에 대해 표지정보조회 실행 후 장애인차량이 아닌 건은 서손 처리한다.
	 * @param crdnIDs 단속 ID 목록
	 * @return 저장여부
	 */
	boolean executeDisabledTagInfoInquire(String... crdnIDs);
}
