package incheon.res.rdm.dc.archamd.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.dc.archamd.service.RdmDcArchamdService;
import incheon.res.rdm.dc.archamd.vo.RdmDcArchamd;
import incheon.res.rdm.dc.archamd.vo.RdmDcArchamdVO;
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.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

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

    @Resource
    protected RdmDcArchamdService rdmDcArchamdService;
    @Resource
    protected RdmComCodeService rdmComCodeService;
    @Resource(name = "propertiesService")
    protected EgovPropertyService propertiesService;


	/**
	 * @MethodDESC : 공사 변경 진행 목록
	 */
	@RequestMapping(value = "/RdmDcArchamdL010.do")
	public String selectArchamdList(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@RequestParam(defaultValue = "1") int pageIndex,
			@ModelAttribute("rdmDcArchamdVO") RdmDcArchamdVO 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.setExseStpoDngCdSe(vo.getStdgEmdCdSe());

        //공사변경 관련 코드
        String[] cdiCdeSe = {"CDI002","CDI003"};
        vo.setInCheck("Y");
        vo.setChgPrcsSttsArray(cdiCdeSe);
        vo.setMngInstCdSe(sessionUserMngCde);

		//공사변경 가능 목록 조회
        List resultList = rdmDcArchamdService.selectArchamdList(vo);
        //카운트 조회
        int resultCnt = rdmDcArchamdService.countList(vo);

        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/archamd/RdmDcArchamdL010";
	}

	/**
	 * @MethodDESC : 공사 변경 완료 목록
	 */
	@RequestMapping(value = "/RdmDcArchamdL020.do")
	public String selectArchamdList2(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@RequestParam(defaultValue = "1") int pageIndex,
			@ModelAttribute("rdmDcArchamdVO") RdmDcArchamdVO 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.setExseStpoDngCdSe(vo.getStdgEmdCdSe());

        //공사변경 관련 코드
        String[] cdiCdeSe = {"CDI004","CDI005"};
        vo.setInCheck("Y");
        vo.setChgPrcsSttsArray(cdiCdeSe);
        vo.setMngInstCdSe(sessionUserMngCde);

		//공사변경 가능 목록 조회
        List resultList = rdmDcArchamdService.selectArchamdList(vo);
        //카운트 조회
        int resultCnt = rdmDcArchamdService.countList(vo);

        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/archamd/RdmDcArchamdL020";
	}

	/**
	 * @MethodDESC : 공사 변경 진행 목록 상세조회
	 */
	@RequestMapping(value = "/RdmDcArchamdR010.do")
	public String selectArchamd(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@ModelAttribute("rdmDcArchamdVO") RdmDcArchamdVO vo,
			ModelMap model
	) throws Exception{

		//상세조회
		RdmDcArchamd rdmDcArchamdVO = null;
		try{
			rdmDcArchamdVO = rdmDcArchamdService.selectArchamd(vo);
		}catch(RuntimeException e){
			log.error("해당 내용이 삭제되었거나 상태가 변경되어 요청내용을 처리 할 수 없습니다.");
		}

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

		//굴착규모
		List resultDigSize = rdmDcArchamdService.selectArchamdPcifList(vo);

		//굴착예정지
		List resultDigPlan = rdmDcArchamdService.selectArchamdCpecList(vo);

		model.addAttribute("rdmDcArchamdVO", rdmDcArchamdVO);
		model.addAttribute("resultDigSize", resultDigSize);
		model.addAttribute("resultDigPlan", resultDigPlan);
		model.addAttribute("searchVo", vo);

		return "res/rdm/dc/archamd/RdmDcArchamdR010";
	}

	/**
	 * @MethodDESC : 공사 변경 완료 목록 상세조회
	 */
	@RequestMapping(value = "/RdmDcArchamdR020.do")
	public String selectArchamdR(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@ModelAttribute("rdmDcArchamdVO") RdmDcArchamdVO vo,
			ModelMap model
	) throws Exception{

		//상세조회
		RdmDcArchamd rdmDcArchamdVO = null;
		try{
			rdmDcArchamdVO = rdmDcArchamdService.selectArchamd(vo);
		}catch(RuntimeException e){
			log.error("해당 내용이 삭제되었거나 상태가 변경되어 요청내용을 처리 할 수 없습니다.");
		}

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

		//굴착규모
		List resultDigSize = rdmDcArchamdService.selectArchamdPcifList(vo);

		//굴착예정지
		List resultDigPlan = rdmDcArchamdService.selectArchamdCpecList(vo);

		model.addAttribute("rdmDcArchamdVO", rdmDcArchamdVO);
		model.addAttribute("resultDigSize", resultDigSize);
		model.addAttribute("resultDigPlan", resultDigPlan);
		model.addAttribute("searchVo", vo);

		return "res/rdm/dc/archamd/RdmDcArchamdR010";
	}

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

		int result = rdmDcArchamdService.receiveArchamd(vo);

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

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

	/**
	 * @MethodDESC : 허가 팝업
	 */
	@RequestMapping(value = "/LayerPopRdmDcArchamdU010.do")
	public String approvalArchamdView(@ModelAttribute("rdmDcArchamdVO") RdmDcArchamdVO vo, ModelMap model
	) throws Exception{

		model.addAttribute("vo", vo);

		return "res/rdm/dc/archamd/LayerPopRdmDcArchamdU010";
	}
	
	/**
	 * @MethodDESC : 허가 처리
	 */
	@RequestMapping(value = "/RdmDcArchamdU011.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> approvalArchamd(
			@ModelAttribute RdmDcArchamdVO vo
	) throws Exception{

		int result = rdmDcArchamdService.approvalArchamd(vo);

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

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

	/**
	 * @MethodDESC : 불허 팝업
	 */
	@RequestMapping(value = "/LayerPopRdmDcArchamdU020.do")
	public String disapprovalArchamdView(@ModelAttribute("rdmDcArchamdVO") RdmDcArchamdVO vo,
			ModelMap model
	) throws Exception{

		model.addAttribute("vo", vo);

		return "res/rdm/dc/archamd/LayerPopRdmDcArchamdU020";
	}

	/**
	 * @MethodDESC : 불허 처리
	 */
	@RequestMapping(value = "/RdmDcArchamdU021.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> disapprovalArchamd(
			@ModelAttribute RdmDcArchamdVO vo
	) throws Exception{

		//현장관리부 수정, 첨부파일 삭제/등록 처리 구현 필요
		int result = rdmDcArchamdService.disapprovalArchamd(vo);

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

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

}