package cokr.xit.fims.sprt.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.sprt.CvlcptDscsnCn;
import cokr.xit.fims.sprt.SprtQuery;
import cokr.xit.fims.sprt.service.Sprt04Service;
import cokr.xit.foundation.data.DataObject;

/**민원 상담 내용 서비스의 웹 컨트롤러
 *
 * <p>상세 설명:
 *
 * <pre>
 * ============ 변경 이력 ============
 * 2023-09-05	JoJH 최초 작성
 * ================================
 * </pre>
 */
public class Sprt04Controller extends ApplicationController {

	/**민원 상담 내용 서비스*/
	@Resource(name = "sprt04Service")
	private Sprt04Service sprt04Service;

	/**민원 상담 내용 관리 메인화면(fims/sprt/sprt04/010-main)을 연다.
	 *
	 * @return /fims/sprt/sprt04010
	 */
	public ModelAndView civilComplaintDiscussionContentMain() {
		ModelAndView mav = new ModelAndView("fims/sprt/sprt04010-main");

		return mav.addObject("pageName", "sprt04010")							// View(jsp)에서 사용할 id 뒤에 붙일 suffix
				.addObject("infoPrefix", "cvlcptDscsnCn")						// prefix
		;
	}

	/**민원 상담 내용 목록을 조회하여 반환한다.<br />
	 * {@link CvlcptDscsnCnService#getCvlcptDscsnCnList(CvlcptDscsnCnQuery)} 참고
	 * @param req 민원 상담 내용 조회 조건
	 * @return jsonView
	 * <pre><code> {
	 *     "cvlcptDscsnCnList": [민원 상담 내용 목록]
	 *     "cvlcptDscsnCnStart": 민원 상담 내용 목록 시작 인덱스
	 *     "cvlcptDscsnCnFetch": 한 번에 가져오는 민원 상담 내용 목록 수
	 *     "cvlcptDscsnCnTotal": 조회 결과 찾은 전체 민원 상담 내용 수
	 * }</code></pre>
	 */
	@RequestMapping(name = "민원 상담 내용 조회", value = "/010/list.do")
	public ModelAndView getCvlcptDscsnCnList(SprtQuery req) {
		List<?> result = sprt04Service.getCvlcptDscsnCnList(setFetchSize(req));

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

	/**지정한 ID의 민원 상담 내용 정보(info)를 반환한다.
	 * @param ExclQuery req
	 * @return fims/excl/excl01020-info 또는 jsonView
	 * <pre>{
	 *     "levyExclusionInfo": 부과제외 정보
	 * }</pre>
	 */
	@RequestMapping(name = "민원 상담 내용 조회", value = "/020/info.do")
	public ModelAndView getCvlcptDscsnCnInfo(SprtQuery req) {
		DataObject cvlcptDscsnCn = sprt04Service.getCvlcptDscsnCnInfo(req);

		boolean json = jsonResponse();

		ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/sprt/sprt04020-info");

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

		return mav
				.addObject("pageName", "sprt04020")								//
				.addObject("FIM065List", commonCodes.get("FIM065"))				// 부과 제외 구분 코드(LEVY_EXCL_SE_CD)
				.addObject("cvlcptDscsnCn", json ? cvlcptDscsnCn : toJson(cvlcptDscsnCn))
		;
	}

	/**민원 상담 내용를 등록한다.
	 * @param cvlcptDscsnCn 민원 상담 내용 정보
	 * @return jsonView
	 * <pre><code> {
	 *     "saved": 등록되었으면 true, 그렇지 않으면 false
	 * }</code></pre>
	 */
	@PostMapping(name = "민원 상담 내용 등록", value = "/020/create.do")
	public ModelAndView createCvlcptDscsnCn(CvlcptDscsnCn cvlcptDscsnCn) {
		boolean saved = false;
		String retMessage = sprt04Service.createCvlcptDscsnCn(cvlcptDscsnCn);

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

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

	/**민원 상담 내용 정보를 수정한다.
	 * @param cvlcptDscsnCn 민원 상담 내용 정보
	 * @return jsonView
	 * <pre><code> {
	 *     "saved": 수정되었으면 true, 그렇지 않으면 false
	 * }</code></pre>
	 */
	@PostMapping(name = "민원 상담 내용 수정", value = "/020/update.do")
	public ModelAndView updateCvlcptDscsnCn(CvlcptDscsnCn cvlcptDscsnCn) {
		boolean saved = false;
		String retMessage = sprt04Service.updateCvlcptDscsnCn(cvlcptDscsnCn);

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

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

	/**지정한 민원 상담 내용를 제거한다.
	 * @param cvlcptDscsnCnIDs 민원 상담 내용 아이디
	 * @return jsonView
	 * <pre><code> {
	 *     "affected": 저장된 정보수
	 *     "saved": 저장되었으면 true, 그렇지 않으면 false
	 * }</code></pre>
	 */
	@PostMapping(name = "민원 상담 내용 제거", value = "/010/remove.do")
	public ModelAndView removeCvlcptDscsnCn(CvlcptDscsnCn cvlcptDscsnCn) {
		boolean saved = false;
		String retMessage = sprt04Service.removeCvlcptDscsnCn(cvlcptDscsnCn);

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

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