package incheon.res.rdm.dd.council.web;


import incheon.com.cmm.api.DefaultApiResponse;
import incheon.com.security.vo.LoginVO;
import incheon.res.app.code.service.UngisAppCodeService;
import incheon.res.rdm.com.code.service.RdmComCodeService;
import incheon.res.rdm.com.pjtplan.service.RdmComPjtplanService;
import incheon.res.rdm.com.pjtplan.vo.RdmComPjtplan;
import incheon.res.rdm.com.pjtplan.vo.RdmComPjtplanVO;
import incheon.res.rdm.com.unitcst.service.RdmComUnitcstService;
import incheon.res.rdm.com.unitcst.vo.RdmComUnitcst;
import incheon.res.rdm.com.unitcst.vo.RdmComUnitcstVO;
import incheon.res.rdm.dd.council.service.RdmDdCouncilService;
import org.egovframe.rte.fdl.property.EgovPropertyService;
import org.egovframe.rte.psl.dataaccess.util.EgovMap;
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.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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

	@Resource
	private RdmComPjtplanService rdmComPjtplanService;
	@Resource
	private RdmComUnitcstService rdmComUnitcstService;
	@Resource
	private RdmDdCouncilService rdmDdCouncilService;
	@Resource
	protected RdmComCodeService rdmComCodeService;
	@Resource
	protected UngisAppCodeService ungisAppCodeService;
	@Resource(name = "propertiesService")
	protected EgovPropertyService propertiesService;

	/**
	 * @MethodDESC : 접수전 사업계획서 목록
	 */
	@RequestMapping(value = "/RdmDdCouncilL050.do")
	public String selectRdmDdCounciL050(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@ModelAttribute RdmComPjtplanVO vo,
			@RequestParam(defaultValue = "1") int pageIndex,
			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());

		//접수전 사업계획서 코드
		String[] bpaCdeSe = {"BPA002", "BPA003"};
		vo.setInCheck("Y");
		vo.setBizPlanPrcsSttsArray(bpaCdeSe);
		vo.setMngInstCd(sessionUserMngCde);
		vo.setExseStpoDngCd(vo.getStdgEmdCdSe());

		List resultList = rdmComPjtplanService.selectPjtplanList(vo);			//사업계획서 목록
		List planYearList = rdmComCodeService.selectPlanYearList("Y");	// 년도
		List dbqCdeList = rdmComCodeService.selectDbqList("Y");			// 심의분기
		List bjdCdeList = rdmComCodeService.selectDocdList("Y");			// 지역

		int totCnt = rdmComPjtplanService.countList(vo);
		paginationInfo.setTotalRecordCount(totCnt);

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

		return "res/rdm/dd/council/RdmDdCouncilL050";
	}

	/**
	 * @MethodDESC : 사업계획서 상세조회
	 */
	@RequestMapping(value = "/RdmDdCouncilR051.do")
	public String selectPjtplan(
			@ModelAttribute("loginUser") LoginVO loginVO, @ModelAttribute RdmComPjtplanVO vo, ModelMap model
	) throws Exception{

		//사업계획서 조회
		RdmComPjtplan result = rdmComPjtplanService.selectPjtplan(vo);

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

		//협의정보 조회
		List conferList = rdmComPjtplanService.selectConferList(vo);

		//사업예정지 조회
		RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
		rdmComUnitcstVO.setBizPlanAplyMngNo(vo.getBizPlanAplyMngNo());
		List unitcstList = rdmComUnitcstService.selectPlanUnitcstList(rdmComUnitcstVO);

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

		return "res/rdm/dd/council/RdmDdCouncilR051";
	}

	/**
	 * @MethodDESC : 사업예정지 상세조회
	 */
	@RequestMapping(value = "/LayerPopRdmDdCouncilR020.do")
	public String selectUnitcst(@ModelAttribute RdmComPjtplanVO vo, ModelMap model)
			throws Exception{

		//사업예정지 정보 조회
		RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
		rdmComUnitcstVO.setBizIntsptMngNo(vo.getBizIntsptMngNo());
		RdmComUnitcst resultUnitcst = rdmComUnitcstService.selectUnitcst(rdmComUnitcstVO);

		// 주소 텍스트 생성 2009.09.22
		String mngNam = resultUnitcst.getMngInstNm();
		String dsdAdr = resultUnitcst.getDsdAdr();
		StringBuffer sb = new StringBuffer();
		sb.append(mngNam);
		sb.append(' ');
		sb.append(dsdAdr);
		if("2".equals(	resultUnitcst.getExseStpoMtnSeCd())){
			sb.append(" 산 ");
		}
		String sjuAdr = resultUnitcst.getExseStpoMno();
		if(sjuAdr!= null){
			sb.append(' ');
			sb.append(sjuAdr) ;
		}
		String sbuAdr = resultUnitcst.getExseStpoSno();
		if(sbuAdr!= null){
			sb.append('-');
			sb.append(sbuAdr) ;
		}
		if(resultUnitcst.getExseStpoEtcAddr() != null ){
			sb.append(' ');
			sb.append(resultUnitcst.getExseStpoEtcAddr());
		}
		resultUnitcst.setDsdAdr(sb.toString());

		String dedAdr = resultUnitcst.getDedAdr();
		sb.append(" ~ ");
		sb.append(dedAdr);

		if("2".equals(resultUnitcst.getExseEdpntMtnSeCd())){
			sb.append(" 산 ");
		}
		String ejuAdr = resultUnitcst.getExseEdpntMno();
		if(ejuAdr!= null){
			sb.append(' ');
			sb.append(ejuAdr);
		}
		String ebuAdr = resultUnitcst.getExseEdpntSno();
		if(ebuAdr!= null){
			sb.append('-');
			sb.append(ebuAdr) ;
		}
		if(resultUnitcst.getExseEdpntEtcAddr() != null ){
			sb.append(' ');
			sb.append(resultUnitcst.getExseEdpntEtcAddr());
		}
		resultUnitcst.setDedAdr(sb.toString());

		//굴착 규모정보 조회
		List scaleList = rdmComUnitcstService.selectScaleList(rdmComUnitcstVO);

		model.addAttribute("scaleList", scaleList);
		model.addAttribute("result", resultUnitcst);

		return "res/rdm/dd/council/LayerPopRdmDdCouncilR020";
	}


	/**
	 * @MethodDESC : 사업예쩡지 변경이력 조회
	 */
	@RequestMapping(value = "/LayerPopRdmDdCouncilR021.do")
	public String selectUnitcstHistory(@ModelAttribute RdmComPjtplanVO vo, ModelMap model)
			throws Exception{

		RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
		rdmComUnitcstVO.setBizIntsptMngNo(vo.getBizIntsptMngNo());
		List result = rdmComUnitcstService.selectUnitcstHistory(rdmComUnitcstVO);

		model.addAttribute("result", result);

		return "res/rdm/dd/council/LayerPopRdmDdCouncilR021";
	}

	/**
	 * @MethodDESC : 심의조정관리 사업계획서 목록
	 */
	@RequestMapping(value = "/RdmDdCouncilL010.do")
	public String selectPjtplanList01(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@ModelAttribute RdmComPjtplanVO vo,
			@RequestParam(defaultValue = "1") int pageIndex,
			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());

		//접수전 사업계획서 코드
		String[] bpaCdeSe = {"BPA007"};
		vo.setInCheck("Y");
		vo.setBizPlanPrcsSttsArray(bpaCdeSe);
		vo.setMngInstCd(sessionUserMngCde);
		vo.setExseStpoDngCd(vo.getStdgEmdCdSe());

		List resultList = rdmComPjtplanService.selectPjtplanList(vo);			//사업계획서 목록
		List planYearList = rdmComCodeService.selectPlanYearList("Y");	// 년도
		List dbqCdeList = rdmComCodeService.selectDbqList("Y");			// 심의분기
		List bjdCdeList = rdmComCodeService.selectDocdList("Y");			// 지역

		int totCnt = rdmComPjtplanService.countList(vo);
		paginationInfo.setTotalRecordCount(totCnt);

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

		return "res/rdm/dd/council/RdmDdCouncilL010";
	}

	/**
	 * @MethodDESC : 심의조정 사업계획서 상세조회
	 */
	@RequestMapping(value = "/RdmDdCouncilR010.do")
	public String selectPjtplan01(
			@ModelAttribute("loginUser") LoginVO loginVO, @ModelAttribute RdmComPjtplanVO vo, ModelMap model
	) throws Exception{

		//사업계획서 조회
		RdmComPjtplan result = rdmComPjtplanService.selectPjtplan(vo);

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

		//협의정보 조회
		List conferList = rdmComPjtplanService.selectConferList(vo);

		//사업예정지 조회
		RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
		rdmComUnitcstVO.setBizPlanAplyMngNo(vo.getBizPlanAplyMngNo());
		List unitcstList = rdmComUnitcstService.selectPlanUnitcstList(rdmComUnitcstVO);

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

		return "res/rdm/dd/council/RdmDdCouncilR010";
	}

	/**
	 * @MethodDESC : 사업예쩡지 심의의견 등록 화면 팝업
	 */
	@RequestMapping(value = "/LayerPopRdmDdCouncilC030.do")
	public String updateUnitcstDbtOpiView(@ModelAttribute RdmComPjtplanVO vo, ModelMap model)
			throws Exception{

		//심의상태 코드
		List dbtCodeList = ungisAppCodeService.getCodeList("DBT", "RMT_BIPA_DT", "N");
		//심의의견
		String bprIdn = vo.getBizIntsptMngNo();
		RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
		rdmComUnitcstVO.setBizIntsptMngNo(bprIdn);
		RdmComUnitcst result = rdmComUnitcstService.selectUnitcst(rdmComUnitcstVO);

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

		return "res/rdm/dd/council/LayerPopRdmDdCouncilC030";
	}

	/**
	 * @MethodDESC : 사업예정지 심의의견 등록 및 수정
	 */
	@RequestMapping(value = "/RdmDdCouncilC031.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> updateUnitcstDbtOpi(
			@ModelAttribute RdmComPjtplanVO vo
	) throws Exception{

		String bprIdn = vo.getBizIntsptMngNo();
		String dbtCde = vo.getDlbrStts();
		String dbtOpi = vo.getDlbrOpnn();

		RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
		rdmComUnitcstVO.setBizIntsptMngNo(bprIdn);
		rdmComUnitcstVO.setDlbrStts(dbtCde);
		rdmComUnitcstVO.setDlbrOpnn(dbtOpi);

		int result = rdmComUnitcstService.updateUnitcstDbt(rdmComUnitcstVO);

		Map<String, Object> resultMap = new HashMap<String, Object>();
		if (result > 0) {
			resultMap.put("result", result);
		} else {
			return ResponseEntity.badRequest().build();
		}

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

	/**
	 * @MethodDESC : 사업예쩡지 심의완료 처리
	 */
	@RequestMapping(value = "/RdmDdCouncilU010.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> updateCouncilFinish(
			@ModelAttribute RdmComPjtplanVO vo
	) throws Exception{

		//사업예정지 조회
		RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
		rdmComUnitcstVO.setBizPlanAplyMngNo(vo.getBizPlanAplyMngNo());
		List unitcstList = rdmComUnitcstService.selectPlanUnitcstList(rdmComUnitcstVO);
		boolean resultDbtCde = true;

		Iterator iter = unitcstList.iterator();
		while(iter.hasNext()){
			EgovMap egovMap = (EgovMap)iter.next();
			String dlbrStts = egovMap.get("dlbrStts").toString();
			// 미심의
			if("DBT001".equals(dlbrStts)){
				resultDbtCde = false;
			}
		}

		int result = 0;
		Map<String, Object> resultMap = new HashMap<String, Object>();
		if(resultDbtCde){
			//미심의가 없는 경우
			result = rdmDdCouncilService.updateCouncilFinish(vo);

			if(result > 0){
				resultMap.put("status","1");
			}else{
				return ResponseEntity.badRequest().build();
			}
		}else{
			//미심의가 있는 경우
			resultMap.put("status","-1");
		}

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

	/**
	 * @MethodDESC : 사업예정지 심의완료 취소처리
	 */
	@RequestMapping(value = "/RdmDdCouncilU020.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> updateCouncilCancel(
			@ModelAttribute RdmComPjtplanVO vo
	) throws Exception{

		int result = rdmDdCouncilService.updateCouncilCancel(vo);

		Map<String, Object> resultMap = new HashMap<String, Object>();
		if (result > 0) {
			resultMap.put("result", result);
		} else {
			return ResponseEntity.badRequest().build();
		}

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

	/**
	 * @MethodDESC : 심의조정완료 사업계획서 목록
	 */
	@RequestMapping(value = "/RdmDdCouncilL040.do")
	public String selectPjtplanList04(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@ModelAttribute("rdmComPjtplanVO") RdmComPjtplanVO vo,
			@RequestParam(defaultValue = "1") int pageIndex,
			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());

		//접수전 사업계획서 코드
		String[] bpaCdeSe = {"BPA008"};
		vo.setInCheck("Y");
		vo.setBizPlanPrcsSttsArray(bpaCdeSe);
		vo.setMngInstCd(sessionUserMngCde);
		vo.setExseStpoDngCd(vo.getStdgEmdCdSe());

		List resultList = rdmComPjtplanService.selectPjtplanList(vo);			//사업계획서 목록
		List planYearList = rdmComCodeService.selectPlanYearList("Y");	// 년도
		List dbqCdeList = rdmComCodeService.selectDbqList("Y");			// 심의분기
		List bjdCdeList = rdmComCodeService.selectDocdList("Y");			// 지역

		int totCnt = rdmComPjtplanService.countList(vo);
		paginationInfo.setTotalRecordCount(totCnt);

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

		return "res/rdm/dd/council/RdmDdCouncilL040";
	}

	/**
	 * @MethodDESC : 심의조정완료 사업계획서 상세조회
	 */
	@RequestMapping(value = "/RdmDdCouncilR040.do")
	public String selectPjtplan04(
			@ModelAttribute("loginUser") LoginVO loginVO, @ModelAttribute("rdmComPjtplanVO") RdmComPjtplanVO vo, ModelMap model
	) throws Exception{

		//사업계획서 조회
		RdmComPjtplan result = rdmComPjtplanService.selectPjtplan(vo);

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

		//협의정보 조회
		List conferList = rdmComPjtplanService.selectConferList(vo);

		//사업예정지 조회
		RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
		rdmComUnitcstVO.setBizPlanAplyMngNo(vo.getBizPlanAplyMngNo());
		List unitcstList = rdmComUnitcstService.selectPlanUnitcstList(rdmComUnitcstVO);

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

		return "res/rdm/dd/council/RdmDdCouncilR040";
	}

	/**
	 * @MethodDESC : 사업예정지 심의의견 조회
	 */
	@RequestMapping(value = "/LayerPopRdmDdCouncilR031.do")
	public String selectdbtOpi(@ModelAttribute RdmComUnitcstVO vo, ModelMap model)
			throws Exception{

		//사업예정지 정보 조회
		RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
		rdmComUnitcstVO.setBizIntsptMngNo(vo.getBizIntsptMngNo());
		RdmComUnitcst resultUnitcst = rdmComUnitcstService.selectUnitcst(rdmComUnitcstVO);

		model.addAttribute("result", resultUnitcst);

		return "res/rdm/dd/council/LayerPopRdmDdCouncilR031";
	}



}