package cokr.xit.fims.excl.web;

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

import javax.annotation.Resource;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import cokr.xit.base.code.CommonCode;
import cokr.xit.base.web.ApplicationController;
import cokr.xit.fims.excl.CrdnReReg;
import cokr.xit.fims.excl.ExclQuery;
import cokr.xit.fims.excl.service.Excl03Service;

/**단속 재등록 서비스의 웹 컨트롤러
 *
 * <p>상세 설명:
 *
 * <pre>
 * ============ 변경 이력 ============
 * 2023-07-03	JoJH 최초 작성
 * ================================
 * </pre>
 */
public class Excl03Controller extends ApplicationController {

	/**단속 재등록 서비스*/
	@Resource(name = "excl03Service")
	private Excl03Service excl03Service;

	/**단속 재등록 관리 메인화면(excl03/excl03-main)을 연다.
	 *
	 * @return /fims/excl/excl03010
	 */
	public ModelAndView crackdownReRegistrationMain() {
		ModelAndView mav = new ModelAndView("fims/excl/excl03010-main");

		// View(jsp)에서 사용할 공통코드를 조회
		Map<String, List<CommonCode>> commonCodes = getCodesOf("FIM054");

		return mav.addObject("pageName", "excl03010")							// View(jsp)에서 사용할 id 뒤에 붙일 suffix
				.addObject("urlPrefix", "/excl/excl03")							// URL로 사용할 prefix
				.addObject("infoPrefix", "crdnReReg")							// prefix
				.addObject("FIM054List", commonCodes.get("FIM054"))				// 업무 구분 코드(TASK_SE_CD)
		;
	}

	/**단속 재등록 목록을 조회하여 반환한다.<br />
	 * {@link Excl03Service#getExcl03List(Excl03Query)} 참고
	 * @param req 단속 재등록 조회 조건
	 * @return jsonView
	 * <pre><code> {
	 *     "excl03List": [단속 재등록 목록]
	 *     "excl03Start": 단속 재등록 목록 시작 인덱스
	 *     "excl03Fetch": 한 번에 가져오는 단속 재등록 목록 수
	 *     "excl03Total": 조회 결과 찾은 전체 단속 재등록 수
	 * }</code></pre>
	 */
	@RequestMapping(name = "단속 재등록 리스트 조회", value = "/010/list.do")
	public ModelAndView getCrdnReRegList(ExclQuery req) {
		List<?> result = excl03Service.getCrdnReRegList(setFetchSize(req));

		return setCollectionInfo(new ModelAndView("jsonView"), result, "crdnReReg");
	}

	/**단속 재등록를 등록한다.
	 * @param excl03 단속 재등록 정보
	 * @return jsonView
	 * <pre><code> {
	 *     "saved": 등록되었으면 true, 그렇지 않으면 false
	 * }</code></pre>
	 */
	@PostMapping(name = "단속 재등록 등록", value = "/010/create.do")
	public ModelAndView createCrdnReReg(CrdnReReg crdnReReg) {
		boolean saved = false;
		String retMessage = excl03Service.createCrdnReReg(crdnReReg);

		if (retMessage.contains("[S]")) {
			saved = true;
		} else {
			saved = false;
		}

		return new ModelAndView("jsonView")
				.addObject("saved", saved)
				.addObject("retMessage", retMessage);
	}

	/**지정한 단속 재등록를 제거한다.
	 * @param excl03IDs 단속 재등록 아이디
	 * @return jsonView
	 * <pre><code> {
	 *     "affected": 저장된 정보수
	 *     "saved": 저장되었으면 true, 그렇지 않으면 false
	 * }</code></pre>
	 */
	@PostMapping(name = "단속 재등록 제거", value = "/010/remove.do")
	public ModelAndView removeCrdnReReg(CrdnReReg crdnReReg) {
		boolean saved = excl03Service.removeCrdnReReg(crdnReReg);

		return new ModelAndView("jsonView")
			.addObject("saved", saved);
	}

}
