package incheon.res.rdm.oe.notbrd.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.attachfile.service.RdmComAttachfileService;
import incheon.res.rdm.com.attachfile.service.RdmFileMngUtil;
import incheon.res.rdm.com.attachfile.vo.RdmComAttachfileVO;
import incheon.res.rdm.oe.notbrd.service.RdmOeNotbrdService;
import incheon.res.rdm.oe.notbrd.vo.RdmOeNotbrd;
import incheon.res.rdm.oe.notbrd.vo.RdmOeNotbrdVO;
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 org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

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

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

	@Resource
    private RdmOeNotbrdService rdmOeNotbrdService;

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

    @Resource(name="RdmFileMngUtil")
	private RdmFileMngUtil fileUtil;

	@Resource
	private RdmComAttachfileService rdmComAttachfileService;



	/**
	 * @MethodName : rdmOenotbrdList
	 * @MethodDESC : 공지사항 관리 조회.
	 */
	@RequestMapping(value = "/RdmOeNotbrdL010.do")

	public String rdmOenotbrdList(@RequestParam(defaultValue = "1") int pageIndex, @ModelAttribute RdmOeNotbrdVO 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 = rdmOeNotbrdService.selectNotbrdList(vo);

        model.addAttribute("resultList", resultList);

        int totCnt = rdmOeNotbrdService.countNotbrd(vo);
        paginationInfo.setTotalRecordCount(totCnt);
        model.addAttribute("paginationInfo", paginationInfo);
        model.addAttribute("searchVo", vo);

		return "res/rdm/oe/notbrd/RdmOeNotbrdL010";
	}


	/**
	 * @MethodDESC : 공지사항 상세보기
	 */
	@RequestMapping("/RdmOeNotbrdR010.do")
    public String	selectNotbrd(@ModelAttribute("loginUser") LoginVO loginVO, @ModelAttribute("rdmOeNotbrdVO") RdmOeNotbrdVO vo,
								  ModelMap model) throws Exception {
		String sessionUserId = loginVO.getUserUnqId();
		vo.setUserAcntMngNo(sessionUserId);

		RdmOeNotbrd result = rdmOeNotbrdService.selectNotbrd(vo);

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

		return "res/rdm/oe/notbrd/RdmOeNotbrdR010";
    }

	/**
	 * @MethodDESC : 공지사항 상세보기 popup
	 */
	@RequestMapping("/LayerPopRdmOeNotbrd.do")
   public String selectNotbrdPop(@ModelAttribute("loginUser") LoginVO loginVO,@ModelAttribute("rdmOeNotbrdVO") RdmOeNotbrdVO vo,
           ModelMap model) throws Exception {

		vo.setUserAcntMngNo(loginVO.getUserUnqId());

		//상세정보 조회ssUsrIdn

		RdmOeNotbrd result = rdmOeNotbrdService.selectNotbrd(vo);

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

       return "res/rdm/oe/notbrd/LayerPopRdmOeNotbrdR010";
   }


	/**
	 * @MethodDESC : 공지사항 등록 화면 이동
	 */
	@RequestMapping("/RdmOeNotbrdC010.do")
    public String	insertNotbrdView(@ModelAttribute("rdmOeNotbrdVO") RdmOeNotbrdVO vo,
            ModelMap model) throws Exception {

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


		return "res/rdm/oe/notbrd/RdmOeNotbrdC010";
    }


	/**
	 * @MethodDESC : 공지사항 등록
	 */
	@PostMapping(
			value = "/RdmOeNotbrdC011.do",
			consumes = MediaType.MULTIPART_FORM_DATA_VALUE
	)
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> insertNotbrd(@ModelAttribute("loginUser") LoginVO loginVO, @ModelAttribute RdmOeNotbrdVO vo,
																				HttpServletRequest request,final MultipartHttpServletRequest multiRequest
	) throws Exception {

		vo.setUserAcntMngNo(loginVO.getUserUnqId());

		String notIdn = rdmOeNotbrdService.selectMaxNotIdn(vo);

		vo.setNtcMttrSn(notIdn);

		// 첨부파일 관련 첨부파일ID 생성
		List<RdmComAttachfileVO> _result = null;

		final Map<String, MultipartFile> files = multiRequest.getFileMap();
		if(!files.isEmpty()){
			_result = fileUtil.parseFileInf(request, files, notIdn, "RMT_NOTC_DT", null);
			Iterator iter = _result.iterator();
			while (iter.hasNext()) {
				rdmComAttachfileService.insertAttachfile((RdmComAttachfileVO)iter.next());
			}
		}

		rdmOeNotbrdService.insertNotbrd(vo);

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

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

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


    }


	/**
	 * @MethodDESC : 공지사항 수정 화면 이동
	 */
	@RequestMapping("/RdmOeNotbrdU010.do")
    public String updateNotbrdView(@ModelAttribute("loginUser") LoginVO loginVO,@ModelAttribute RdmOeNotbrdVO vo, ModelMap model) throws Exception {

		vo.setUserAcntMngNo(loginVO.getUserUnqId());

		//상세정보 조회
		RdmOeNotbrd result = rdmOeNotbrdService.selectNotbrd(vo);

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

        return "res/rdm/oe/notbrd/RdmOeNotbrdU010";
    }

	/**
	 * @MethodDESC : 공지사항 수정
	 */
	@PostMapping(
			value = "/RdmOeNotbrdU011.do",
			consumes = MediaType.MULTIPART_FORM_DATA_VALUE
	)
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> updateNotbrd(
			@ModelAttribute RdmOeNotbrdVO vo, HttpServletRequest request
			,final MultipartHttpServletRequest multiRequest
	) throws Exception {



		String notIdn = vo.getNtcMttrSn();

		// 첨부파일 관련 첨부파일ID 생성
		List<RdmComAttachfileVO> _result = null;

		final Map<String, MultipartFile> files = multiRequest.getFileMap();

		if(!files.isEmpty()){
		 	_result = fileUtil.parseFileInf(request, files, notIdn, "RMT_NOTC_DT", null);
			Iterator iter = _result.iterator();
			while (iter.hasNext()) {
				rdmComAttachfileService.insertAttachfile((RdmComAttachfileVO)iter.next());
			}
		}

		rdmOeNotbrdService.updateNotbrd(vo);

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

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

	/**
	 * @MethodDESC : 공지사항 삭제
	 */
	@PostMapping(
			value = "/RdmOeNotbrdD010.do",
			consumes = MediaType.MULTIPART_FORM_DATA_VALUE
	)
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> deleteNotbrd(@ModelAttribute RdmOeNotbrdVO vo) throws Exception {


		int result = rdmOeNotbrdService.deleteNotbrd(vo);
		Map<String, Object> resultMap = new HashMap<String, Object>();
		if(result > 0){
			//첨부파일 삭제
			RdmComAttachfileVO fvo = new RdmComAttachfileVO();
			String tblNam = "RMT_NOTC_DT";
			String datSeq = vo.getNtcMttrSn();
			fvo.setTblNam(tblNam);
			fvo.setDatSeq(datSeq);
			rdmComAttachfileService.deleteAttachfileAll(fvo);
			resultMap.put("result", "succ");
		}else{
			resultMap.put("result", "fail");
		}

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

    }

}