package incheon.res.rdm.oe.appprd.web;

import incheon.com.cmm.ComDefaultVO;
import incheon.com.cmm.ResponseCode;
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.code.vo.RdmComCodeVO;
import incheon.res.rdm.oe.appprd.service.RdmOeAppprdService;
import incheon.res.rdm.oe.appprd.vo.RdmOeAppprd;
import incheon.res.rdm.oe.appprd.vo.RdmOeAppprdVO;
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.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@SessionAttributes(types = ComDefaultVO.class)
@RequestMapping("${api.rps-path}")
public class RdmOeAppprdController {

	@Resource
    private RdmOeAppprdService rdmOeAppprdService;

	@Resource
    private RdmComCodeService rdmComCodeService;

    @Resource(name = "propertiesService")
    protected EgovPropertyService propertiesService;

    /** Log Info */
    protected Log log = LogFactory.getLog(this.getClass());
    
	/**
	 * @MethodName : rdmOeappprdList
	 * @MethodDESC : 사업계획심의공고 관리 조회.
	 */
	@RequestMapping(value = "/RdmOeAppprdL010.do")
	public String rdmOeappprdList(@RequestParam(defaultValue = "1") int pageIndex, HttpServletRequest request, @ModelAttribute RdmOeAppprdVO 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());

        List resultList = rdmOeAppprdService.selectAppprdList(vo);

        model.addAttribute("resultList", resultList);

        int totCnt = rdmOeAppprdService.countAppprd(vo);
        paginationInfo.setTotalRecordCount(totCnt);
        model.addAttribute("paginationInfo", paginationInfo);
        model.addAttribute("searchVo", vo);

        //관리기관 정보
        List guifCodeList = rdmComCodeService.selectGuifList("Y");
        model.addAttribute("guifCodeList", guifCodeList);
        RdmComCodeVO codeVo = new RdmComCodeVO();

		return "res/rdm/oe/appprd/RdmOeAppprdL010";
	}


	/**
	 * @MethodDESC : 사업계획심의공고 상세보기
	 */
	@RequestMapping("/RdmOeAppprdR010.do")
    public String	selectAppprd(@ModelAttribute("loginUser") LoginVO loginVO,  @ModelAttribute RdmOeAppprdVO vo,
								  ModelMap model) throws Exception {

		String sessionUserId = loginVO.getUserUnqId();
		vo.setSsUsrIdn(sessionUserId);

		RdmOeAppprd result = rdmOeAppprdService.selectAppprd(vo);

		model.addAttribute("result", result);
		model.addAttribute("searchVo", vo);
		//조회수 증가
		//조회 화면과 수정화면 카운트 협의
		rdmOeAppprdService.updateHitCnt(vo);

        return "res/rdm/oe/appprd/RdmOeAppprdR010";
    }


	/**
	 * @MethodDESC : 사업계획심의공고 등록 하기위한 전 처리
	 */
	@RequestMapping("/RdmOeAppprdC010.do")
    public String	insertAppprdView(@ModelAttribute("loginUser") LoginVO loginVO, @ModelAttribute RdmOeAppprdVO vo, ModelMap model) throws Exception {

		String sessionUserNam = loginVO.getUserNm();

		model.addAttribute("sessionUserNam", sessionUserNam);

		//관리기관 정보
        List guifCodeList = rdmComCodeService.selectGuifList("N");
        model.addAttribute("guifCodeList", guifCodeList);

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


        return "res/rdm/oe/appprd/RdmOeAppprdC010";
    }


	/**
	 * @MethodDESC : 사업계획심의공고 등록
	 */
	@PostMapping(value = "/RdmOeAppprdC011.do",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> insertAppprd(@ModelAttribute("loginUser") LoginVO loginVO,
																				@ModelAttribute RdmOeAppprdVO vo) throws Exception {

		String sessionUserId = loginVO.getUserUnqId();
		vo.setUserAcntMngNo(sessionUserId);

		String dbnSeq = rdmOeAppprdService.selectDbnSeq(vo);

		vo.setDlbrPbancSn(dbnSeq);

		rdmOeAppprdService.insertAppprd(vo);

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

		resultMap.put("result", "succ");

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

    }


	/**
	 * @MethodDESC : 사업계획심의공고 수정 하기위한 전 처리
	 */
	@RequestMapping("/RdmOeAppprdU010.do")
    public String	updateAppprdView(@ModelAttribute("loginUser") LoginVO loginVO,
									  @ModelAttribute("rdmOeAppprdVO") RdmOeAppprdVO vo, ModelMap model) throws Exception {


		String sessionUserId = loginVO.getUserUnqId();
		vo.setUserAcntMngNo(sessionUserId);

		//상세정보 조회
		RdmOeAppprd result = rdmOeAppprdService.selectAppprd(vo);

		//관리기관 정보
        List guifCodeList = rdmComCodeService.selectGuifList("Y");
        model.addAttribute("guifCodeList", guifCodeList);

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

        return "res/rdm/oe/appprd/RdmOeAppprdU010";
    }

	/**
	 * @MethodDESC : 사업계획심의공고 수정
	 */
	@PostMapping(value = "/RdmOeAppprdU011.do", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> updateAppprd(@ModelAttribute RdmOeAppprdVO vo) throws Exception {

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

		int result = rdmOeAppprdService.updateAppprd(vo);

		resultMap.put("success", true);
		resultMap.put("result", result);

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

	/**
	 * @MethodDESC : 사업계획심의공고 삭제
	 */
	@RequestMapping("/RdmOeAppprdD010.do")
    public ResponseEntity<DefaultApiResponse<Map<String, Object>>>	deleteAppprd(@ModelAttribute RdmOeAppprdVO vo) throws Exception {


		Map<String, Object> resultMap = new HashMap<String, Object>();
		rdmOeAppprdService.deleteAppprd(vo);
		resultMap.put("success", true);
		return ResponseEntity.ok(DefaultApiResponse.success(resultMap));
    }

}