package incheon.res.rdm.cs.cmprpt.web;


import incheon.com.cmm.api.DefaultApiResponse;
import incheon.com.cmm.context.RequestContext;
import incheon.com.cmm.exception.BusinessException;
import incheon.com.security.vo.LoginVO;
import incheon.res.app.code.service.UngisAppCodeService;
import incheon.res.rdm.oe.queans.service.RdmOeQueansService;
import incheon.res.rdm.oe.queans.vo.RdmOeQueans;
import incheon.res.rdm.oe.queans.vo.RdmOeQueansVO;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.egovframe.rte.fdl.property.EgovPropertyService;
import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("${api.rps-path}")
public class RdmCsCmprptController {

	protected Log log = LogFactory.getLog(this.getClass());

	@Resource
	private RdmOeQueansService rdmOeQueansService;
	@Resource
	private UngisAppCodeService ungisAppCodeService;
	@Resource(name = "propertiesService")
	protected EgovPropertyService propertiesService;

	/**
	 * 불편신고 목록화면 이동
	 * @param page
	 * @param vo
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/RdmCsCmprptL010.do")
	public String selectCmprptList(
			@RequestParam(defaultValue = "1") int pageIndex,
			@ModelAttribute("rdmCsCmprptVO") RdmOeQueansVO vo,
			ModelMap model) throws Exception{

		/*페이징*/
		vo.setPageIndex(pageIndex);

		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(pageIndex);
		paginationInfo.setRecordCountPerPage(vo.getRecordCountPerPage());
		paginationInfo.setPageSize(vo.getPageSize());

		vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
		vo.setLastIndex(paginationInfo.getLastRecordIndex());
		vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());

		vo.setTypChk("C");//C:불편신고, Q:문의 사항

		List resultList = rdmOeQueansService.selectQueansList(vo);

		model.addAttribute("resultList", resultList);

		int totCnt = rdmOeQueansService.countList(vo);
		paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);
		model.addAttribute("searchVo", vo);

		//카테고리 정보
		List ctgryCdList = ungisAppCodeService.getCodeList("CTG", "RMT_QANA_DT", "Y");
		model.addAttribute("ctgryCdList", ctgryCdList);

		return "res/rdm/cs/cmprpt/RdmCsCmprptL010";
	}

	/**
	 * 불편신고 상세화면 이동
	 * @param vo
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/RdmCsCmprptR010.do")
	public String selectQueans(@ModelAttribute("loginUser") LoginVO loginVO, @ModelAttribute("rdmCsCmprptVO") RdmOeQueansVO vo, ModelMap model) throws Exception {

		vo.setUserAcntMngNo(loginVO.getUserUnqId());
		vo.setSsUsrIdn(vo.getUserAcntMngNo());

		if("Y".equals(vo.getVtpChk())){
			rdmOeQueansService.updateHitCntAdd(vo);
		}

		RdmOeQueans result = rdmOeQueansService.selectQueans(vo);
		rdmOeQueansService.updateQueansHitcnt(vo);

		model.addAttribute("result", result);
		model.addAttribute("searchVo", vo);

		return "res/rdm/cs/cmprpt/RdmCsCmprptR010";
	}

	/**
	 * 불편신고 답변 등록화면 이동
	 * @param vo
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/RdmCsCmprptC020.do")
	public String insertAnsView(@ModelAttribute("rdmCsCmprptVO") RdmOeQueansVO vo, ModelMap model) throws Exception {

		LoginVO loginVO = RequestContext.getCurrentUser();

		vo.setUserAcntMngNo(loginVO.getUserUnqId());
		vo.setSsUsrIdn(vo.getUserAcntMngNo());

		RdmOeQueans result = rdmOeQueansService.selectQueans(vo);

		model.addAttribute("rdmCsCmprpt", result);
		model.addAttribute("searchVo", vo);

		return "res/rdm/cs/cmprpt/RdmCsCmprptC020";
	}

	/**
	 * 불편신고 답변 등록
	 * @param vo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/RdmCsCmprptC021.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> insertAns(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@ModelAttribute RdmOeQueansVO vo
	) throws Exception{

		vo.setIncnvnncDclrYn("C");
		vo.setTypChk(vo.getIncnvnncDclrYn());
		vo.setUserAcntMngNo(loginVO.getUserUnqId());
		vo.setQstnSn(vo.getQstnSn());

		int maxAnsSn = Integer.parseInt(rdmOeQueansService.selectMaxAnsSeq(vo));

		vo.setAnsSn(new BigDecimal(maxAnsSn+1));
		String ansSub ="[답변"+(maxAnsSn+1)+ "]-"+vo.getIncnvnncDclrTtl();
		vo.setIncnvnncDclrTtl(ansSub);
		vo.setIncnvnncDclrCn(vo.getQnaCttans());

		rdmOeQueansService.insertQueans(vo);

		Map<String, Object> resultMap = new HashMap<String, Object>();
		resultMap.put("ansSn",vo.getAnsSn());

		return ResponseEntity.ok(DefaultApiResponse.success(resultMap, "답변이 등록 되었습니다."));
	}

	/**
	 * 불편신고 답변 삭제
	 * @param vo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/RdmCsCmprptD010.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> deleteCmprpt(
			@ModelAttribute RdmOeQueansVO vo
	) throws Exception{

		int cnt = rdmOeQueansService.deleteQueans(vo);

		Map<String, Object> resultMap = new HashMap<String, Object>();

		if(cnt > 0){
			resultMap.put("result","succ");
		}else{
			throw new BusinessException("삭제를 실패했습니다. ",HttpStatus.INTERNAL_SERVER_ERROR);
		}

		return ResponseEntity.ok(DefaultApiResponse.success(resultMap, "삭제 되었습니다."));
	}

	/**
	 * 불편신고 답변 수정 화면이동
	 * @param vo
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/RdmCsCmprptU010.do")
	public String updateCmprptView(@ModelAttribute("rdmCsCmprptVO") RdmOeQueansVO vo, ModelMap model) throws Exception {

		LoginVO loginVO = RequestContext.getCurrentUser();

		vo.setUserAcntMngNo(loginVO.getUserUnqId());
		vo.setSsUsrIdn(vo.getUserAcntMngNo());

		if("Y".equals(vo.getVtpChk())){
			rdmOeQueansService.updateHitCntAdd(vo);
		}

		RdmOeQueans result = rdmOeQueansService.selectQueans(vo);

		RdmOeQueans cmprptInfo = null;
		if(result != null){
			if( null != result.getQstnSn()){
				vo.setQstnSn(result.getQstnSn());
				vo.setAnsSn(result.getAnsSn());
				vo.setIncnvnncDclrYn("C");
				cmprptInfo = rdmOeQueansService.selectQueansByQueInfo(vo);
			}
		}

		model.addAttribute("rdmCsCmprpt", result);
		model.addAttribute("rdmCsCmprpt2", cmprptInfo);
		model.addAttribute("searchVo", vo);
		//카테고리 정보
		List ctgCdeList = ungisAppCodeService.getCodeList("CTG", "RMT_QANA_DT", "N");
		model.addAttribute("ctgCdeList", ctgCdeList);

		return "res/rdm/cs/cmprpt/RdmCsCmprptU010";
	}

	/**
	 * 불편신고 답변 수정
	 * @param vo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/RdmCsCmprptU011.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> updateQueans(
			@ModelAttribute RdmOeQueansVO vo
	) throws Exception {

		int cnt = rdmOeQueansService.updateQueans(vo);

		Map<String, Object> resultMap = new HashMap<String, Object>();

		if(cnt > 0){
			resultMap.put("result","succ");
		}else{
			throw new BusinessException("답변 수정을 실패했습니다. ",HttpStatus.INTERNAL_SERVER_ERROR);
		}

		return ResponseEntity.ok(DefaultApiResponse.success(resultMap, "답변이 수정 되었습니다."));
	}
}
