package incheon.res.rdm.dd.accept.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.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.RdmComUnitcstVO;
import incheon.res.rdm.dd.accept.service.RdmDdAcceptService;
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.HashMap;
import java.util.List;
import java.util.Map;

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

	@Resource
    private RdmComPjtplanService rdmComPjtplanService;
	@Resource
    private RdmComUnitcstService rdmComUnitcstService;
	@Resource
    private RdmDdAcceptService rdmDdAcceptService;
    @Resource
    protected RdmComCodeService rdmComCodeService;
    @Resource(name = "propertiesService")
    protected EgovPropertyService propertiesService;

	/**
	 * @MethodDESC : 사업계획서 목록 조회
	 */
	@RequestMapping(value = "/RdmDdAcceptL020.do")
	public String selectPjtplanList(
			@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 = {"BPA004"};
        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/accept/RdmDdAcceptL020";
	}

	/**
	 * @MethodDESC : 사업계획서 상세조회
	 */
	@RequestMapping(value = "/RdmDdAcceptR010.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/RdmDdAcceptL020.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/accept/RdmDdAcceptR010";
	}

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

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

		//접수처리(심의조정)
		vo.setBizPlanPrcsStts("BPA007");

		int result = rdmDdAcceptService.updateAcceptPjt(vo);
		if (result > 0) {
			resultMap.put("result", result);
		} else {
			return ResponseEntity.badRequest().build();
		}
		return ResponseEntity.ok(DefaultApiResponse.success(resultMap));
	}

	/**
	 * @MethodDESC : 접수취소처리
	 */
	@RequestMapping(value = "/RdmDdAcceptU020.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> updateAcceptCancel(
			@ModelAttribute RdmComPjtplanVO vo
	) throws Exception{

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

		//접수 취소
		vo.setBizPlanPrcsStts("BPA004");

		int result = rdmDdAcceptService.updateAcceptCancel(vo);
		if (result > 0) {
			resultMap.put("result", result);
		} else {
			return ResponseEntity.badRequest().build();
		}
		return ResponseEntity.ok(DefaultApiResponse.success(resultMap));
	}

	/**
	 * @MethodDESC : 보완요청 페이지 팝업
	 */
	@RequestMapping(value = "/LayerPopRdmDdAcceptC020.do")
	public String updateRevDesView(@ModelAttribute RdmComPjtplanVO vo, ModelMap model)
	  throws Exception{

		model.addAttribute("vo", vo);

		return "res/rdm/dd/accept/LayerPopRdmDdAcceptC020";
	}

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

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

		//보완요청 코드
		vo.setBizPlanPrcsStts("BPA005");

		int result = rdmDdAcceptService.updateRevDes(vo);
		if (result > 0) {
			resultMap.put("result", result);
		} else {
			return ResponseEntity.badRequest().build();
		}
		return ResponseEntity.ok(DefaultApiResponse.success(resultMap));
	}

}