package incheon.res.rdm.dc.cstcom.web;


import incheon.com.cmm.api.DefaultApiResponse;
import incheon.com.security.vo.LoginVO;
import incheon.res.rdm.com.code.service.RdmComCodeService;
import incheon.res.rdm.com.digplan.service.RdmComDigplanService;
import incheon.res.rdm.com.digplan.vo.RdmComDigplanVO;
import incheon.res.rdm.com.digsize.service.RdmComDigsizeService;
import incheon.res.rdm.com.digsize.vo.RdmComDigsizeVO;
import incheon.res.rdm.com.peracc.service.RdmComPeraccService;
import incheon.res.rdm.com.peracc.vo.RdmComPeraccVO;
import incheon.res.rdm.com.perinfo.service.RdmComPerinfoService;
import incheon.res.rdm.com.perinfo.vo.RdmComPerinfoVO;
import incheon.res.rdm.dc.cstcom.service.RdmDcCstcomService;
import incheon.res.mng.govoff.service.RdmOeGovoffService;
import incheon.res.mng.govoff.vo.RdmOeGovoff;
import incheon.res.mng.govoff.vo.RdmOeGovoffVO;
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.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.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

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

	@Resource
    private RdmComPeraccService rdmComPeraccService;
	@Resource
	private RdmComPerinfoService rdmComPerinfoService;
	@Resource
	private RdmComDigsizeService rdmComDigsizeService;
	@Resource
	private RdmComDigplanService rdmComDigplanService;
	@Resource
	private RdmDcCstcomService rdmDcCstcomService;
	@Resource
    private RdmOeGovoffService rdmOeGovoffService;
    @Resource
    protected RdmComCodeService rdmComCodeService;
    @Resource(name = "propertiesService")
    protected EgovPropertyService propertiesService;


	/**
	 * @MethodDESC : 착공계 목록 조회
	 */
	@RequestMapping(value = "/RdmDcCstcomL010.do")
	public String selectCstcomList(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@RequestParam(defaultValue = "1") int pageIndex,
			@ModelAttribute("rdmComPeraccVO") RdmComPeraccVO vo,
			ModelMap model
	) throws Exception{

	    String sessionUserMngCde = loginVO.getRoadMngInstCd();

		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.setExseStpoDngCd(vo.getStdgEmdCdSe());

        //접수 신청중 사업계획서 코드
        String[] rdhCdeSe = {"RDH402","RDH403","RDH404"};
        vo.setInCheck("Y");
        vo.setRoadDggPrcsSttsArray(rdhCdeSe);
		vo.setMngInstCdSe(sessionUserMngCde);
		vo.setRoadDggPrcsStts(vo.getRoadDggPrcsSttsSe());

		//착공계 목록
        Map<String, Object> resultMap = rdmComPeraccService.selectPeraccList(vo);

        List resultList = (List)resultMap.get("resultList");
        int resultCnt = (Integer)resultMap.get("resultCnt");

        paginationInfo.setTotalRecordCount(resultCnt);

        //년도
        List planYearList = rdmComCodeService.selectPlanYearList("Y");

        //법정동
        List docdList = rdmComCodeService.selectDocdList("Y");

        model.addAttribute("resultList", resultList);
        model.addAttribute("planYearList", planYearList);
        model.addAttribute("docdList", docdList);
        model.addAttribute("paginationInfo", paginationInfo);
        model.addAttribute("searchVo", vo);

		return "res/rdm/dc/cstcom/RdmDcCstcomL010";
	}

	/**
	 * @MethodDESC : 검토완료 착공계 목록 조회
	 */
	@RequestMapping(value = "/RdmDcCstcomL020.do")
	public String selectCstcomList2(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@RequestParam(defaultValue = "1") int pageIndex,
			@ModelAttribute("rdmComPeraccVO") RdmComPeraccVO vo,
			ModelMap model
	) throws Exception{

		String sessionUserMngCde = loginVO.getRoadMngInstCd();

		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.setExseStpoDngCd(vo.getStdgEmdCdSe());

        //접수 신청중 사업계획서 코드
        String[] rdhCdeSe = {"RDH406"};
        vo.setInCheck("Y");
        vo.setRoadDggPrcsSttsArray(rdhCdeSe);
		vo.setMngInstCdSe(sessionUserMngCde);

		//착공계 목록
        Map<String, Object> resultMap = rdmComPeraccService.selectPeraccList(vo);

        List resultList = (List)resultMap.get("resultList");
        int resultCnt = (Integer)resultMap.get("resultCnt");

        paginationInfo.setTotalRecordCount(resultCnt);

        //년도
        List planYearList = rdmComCodeService.selectPlanYearList("Y");

        //법정동
        List docdList = rdmComCodeService.selectDocdList("Y");

        model.addAttribute("resultList", resultList);
        model.addAttribute("planYearList", planYearList);
        model.addAttribute("docdList", docdList);
        model.addAttribute("paginationInfo", paginationInfo);
        model.addAttribute("searchVo", vo);

		return "res/rdm/dc/cstcom/RdmDcCstcomL020";
	}

	/**
	 * @MethodDESC : 착공계 진행 상세조회
	 */
	@RequestMapping(value = "/RdmDcCstcomR010.do")
	public String selectCstcom(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@ModelAttribute("rdmComPeraccVO") RdmComPeraccVO vo,
			ModelMap model
	) throws Exception{

		String rdiIdn = vo.getRoadDggMngNo();

		//공사개요
		RdmComPerinfoVO rdmComPerinfoVO = new RdmComPerinfoVO();
		rdmComPerinfoVO.setRoadDggMngNo(rdiIdn);
		RdmComPerinfoVO resultPerinfo = rdmComPerinfoService.selectPerinfo(rdmComPerinfoVO);

		if(!loginVO.getRoadMngInstCd().equals(resultPerinfo.getMngInstCd())){
			return "redirect:/rps/RdmDcCstcomL010.do";
		}
		
		//굴착예정지
		RdmComDigplanVO rdmComDigplanVO = new RdmComDigplanVO();
		rdmComDigplanVO.setRoadDggMngNo(rdiIdn);
		List resultDigPlan = rdmComDigplanService.selectDigplanList(rdmComDigplanVO);

		model.addAttribute("resultPerinfo", resultPerinfo);
		model.addAttribute("resultDigPlan", resultDigPlan);
		model.addAttribute("searchVo", vo);

		return "res/rdm/dc/cstcom/RdmDcCstcomR010";
	}

	/**
	 * @MethodDESC : 착공계 완료 상세조회
	 */
	@RequestMapping(value = "/RdmDcCstcomR020.do")
	public String selectCstcomR(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@ModelAttribute("rdmComPeraccVO") RdmComPeraccVO vo,
			ModelMap model
	) throws Exception{

		String rdiIdn = vo.getRoadDggMngNo();

		//공사개요
		RdmComPerinfoVO rdmComPerinfoVO = new RdmComPerinfoVO();
		rdmComPerinfoVO.setRoadDggMngNo(rdiIdn);
		RdmComPerinfoVO resultPerinfo = rdmComPerinfoService.selectPerinfo(rdmComPerinfoVO);

		if(!loginVO.getRoadMngInstCd().equals(resultPerinfo.getMngInstCd())){
			return "redirect:/rps/RdmDcCstcomL020.do";
		}

		//굴착예정지
		RdmComDigplanVO rdmComDigplanVO = new RdmComDigplanVO();
		rdmComDigplanVO.setRoadDggMngNo(rdiIdn);
		List resultDigPlan = rdmComDigplanService.selectDigplanList(rdmComDigplanVO);

		model.addAttribute("resultPerinfo", resultPerinfo);
		model.addAttribute("resultDigPlan", resultDigPlan);
		model.addAttribute("searchVo", vo);

		return "res/rdm/dc/cstcom/RdmDcCstcomR010";
	}

	/**
	 * @MethodDESC : 접수 화면으로 이동
	 */
	@RequestMapping(value = "/LayerPopRdmDcCstcomU010.do")
	public String receiveCstcomView(@ModelAttribute("rdmComPerinfoVO") RdmComPerinfoVO vo,
			ModelMap model
	) throws Exception{

		model.addAttribute("vo", vo);

		return "res/rdm/dc/cstcom/LayerPopRdmDcCstcomU010";
	}

	/**
	 * @MethodDESC : 접수처리
	 */
	@RequestMapping(value = "/RdmDcCstcomU011.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> receiveCstcom(
			@ModelAttribute RdmComPerinfoVO vo
	) throws Exception{

		int result = rdmDcCstcomService.receiveCstcom(vo);

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

		return ResponseEntity.ok(DefaultApiResponse.success(resultMap));
	}

	/**
	 * @MethodDESC : 보완요청 레이어 팝업
	 */
	@RequestMapping(value = "/LayerPopRdmDcCstcomU020.do")
	public String demandCstcomView(@ModelAttribute("rdmComPerinfoVO") RdmComPerinfoVO vo,
			ModelMap model
	) throws Exception{

		model.addAttribute("vo", vo);

		return "res/rdm/dc/cstcom/LayerPopRdmDcCstcomU020";
	}

	/**
	 * @MethodDESC : 보완요청 처리
	 */
	@RequestMapping(value = "/RdmDcCstcomU021.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> demandCstcom(
			@ModelAttribute RdmComPerinfoVO vo
	) throws Exception{

		int result = rdmDcCstcomService.demandCstcom(vo);

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

		return ResponseEntity.ok(DefaultApiResponse.success(resultMap));
	}


	/**
	 * @MethodDESC : 검토완료처리
	 */
	@RequestMapping(value = "/RdmDcCstcomU030.do")
	public String checkCompleteCstcom(@ModelAttribute("rdmComPeraccVO") RdmComPeraccVO vo) throws Exception{

		RdmComPerinfoVO rdmComPerinfoVO = new RdmComPerinfoVO();
		rdmComPerinfoVO.setRoadDggMngNo(vo.getRoadDggMngNo());
		rdmDcCstcomService.checkCompleteCstcom(rdmComPerinfoVO);

		return "forward:/rps/RdmDcCstcomR010.do";
	}

	/**
	 * @MethodDESC : 인쇄 페이지 팝업
	 */
	@RequestMapping(value = "/LayerPopRdmDcCstcomR020.do")
	public String printCstcom(@ModelAttribute("rdmComPeraccVO") RdmComPeraccVO vo, ModelMap model) throws Exception{

		String rdiIdn = vo.getRoadDggMngNo();

		//공사개요
		RdmComPerinfoVO rdmComPerinfoVO = new RdmComPerinfoVO();
		rdmComPerinfoVO.setRoadDggMngNo(rdiIdn);
		RdmComPerinfoVO resultPerinfo = rdmComPerinfoService.selectPerinfo(rdmComPerinfoVO);

		//자치단체장
		RdmOeGovoffVO rdmOeGovoffVO = new RdmOeGovoffVO();
		rdmOeGovoffVO.setMngInstCd(resultPerinfo.getMngInstCd());
		RdmOeGovoff rdmOeGovoff = rdmOeGovoffService.selectGovoff(rdmOeGovoffVO);

		//굴착규모(일시점용)
		RdmComDigsizeVO rdmComDigsizeVO = new RdmComDigsizeVO();
		rdmComDigsizeVO.setRoadDggMngNo(rdiIdn);
		List resultDigSize = rdmComDigsizeService.selectDigsizeList(rdmComDigsizeVO);

		//오늘날짜
		Date now = new Date();
		model.addAttribute("now", now);
		
		model.addAttribute("resultPerinfo", resultPerinfo);
		model.addAttribute("rdmOeGovoff", rdmOeGovoff);
		model.addAttribute("resultDigSize", resultDigSize);

		return "res/rdm/dc/cstcom/LayerPopRdmDcCstcomR020";
	}
}