package incheon.res.mng.nt.popup.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.mng.nt.popup.service.MngNtPopupService;
import incheon.res.mng.nt.popup.vo.MngNtPopup;
import incheon.res.mng.nt.popup.vo.MngNtPopupVO;
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 org.apache.log4j.Logger;
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.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
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.rcs-path}")
public class MngNtPopupController {

    @Resource
    private MngNtPopupService mngNtPopupService;

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

    @Resource
    private RdmComAttachfileService rdmComAttachfileService;

    /**
     * @MethodDESC : 팝업공지사항관리 조회.
     */
    @RequestMapping(value = "/MngNtPopupL010.do")
    public String selectPopupList(@RequestParam(defaultValue = "1") int pageIndex, @ModelAttribute("mngNtPopupVO") MngNtPopupVO 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());

        int totCnt = mngNtPopupService.countPopup(vo);
        paginationInfo.setTotalRecordCount(totCnt);
        model.addAttribute("paginationInfo", paginationInfo);

        List resultList = mngNtPopupService.selectPopupList(vo);
        model.addAttribute("resultList",resultList);
        model.addAttribute("resultCnt", totCnt);
        model.addAttribute("searchVo", vo);

        return "res/mng/nt/popup/MngNtPopupL010";
    }

    @RequestMapping(value = "/MngNtPopupR010.do")
    public String selectPopup(@ModelAttribute("mngNtPopupVO") MngNtPopupVO vo, Model model) throws Exception{

        MngNtPopup result = mngNtPopupService.selectPopup(vo);
        model.addAttribute("result", result);

        return "res/mng/nt/popup/MngNtPopupR010";
    }

    @RequestMapping(value = "/MngNtPopupU010.do")
    public String updatePopupView(@ModelAttribute("mngNtPopupVO") MngNtPopupVO vo, ModelMap model) throws Exception{

        MngNtPopup result = mngNtPopupService.selectPopup(vo);

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

        return "res/mng/nt/popup/MngNtPopupU010";
    }

    @RequestMapping(value = "/MngNtPopupU011.do",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<DefaultApiResponse<Map<String, Object>>> updatePopup(@ModelAttribute("mngNtPopupVO") MngNtPopupVO vo
            , HttpServletRequest request,final MultipartHttpServletRequest multiRequest) throws Exception{
        Map<String, Object> resultMap = new HashMap<>();

        String popupSn = vo.getPopupSn();

        if("P".equals(vo.getPopupSe())){
            RdmComAttachfileVO fvo = new RdmComAttachfileVO();
            String tblNam = "CMT_POPUP_NTCE";
            String datSeq = popupSn;
            fvo.setTblNam(tblNam);
            fvo.setDatSeq(datSeq);
            rdmComAttachfileService.deleteAttachfileAll(fvo);
        } else if("B".equals(vo.getPopupSe())){
            vo.setPopupCn("");

            List<RdmComAttachfileVO> _result = null;

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

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

        mngNtPopupService.updatePopup(vo);

        resultMap.put("result", "succ");
        return ResponseEntity.ok(DefaultApiResponse.success(resultMap));
    }

    @RequestMapping(value = "/MngNtPopupC010.do")
    public String insertPopupView(@ModelAttribute("mngNtPopupVO") MngNtPopupVO vo, ModelMap model) throws Exception{

        return "res/mng/nt/popup/MngNtPopupC010";
    }

    @RequestMapping(value = "/MngNtPopupC011.do",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<DefaultApiResponse<Map<String, Object>>> insertPopup(@ModelAttribute("loginUser") LoginVO loginVO,
                                                                               @ModelAttribute("mngNtPopupVO") MngNtPopupVO vo
                                                                                , HttpServletRequest request,final MultipartHttpServletRequest multiRequest) throws Exception{
        String sessionUserId = loginVO.getUserUnqId();
        vo.setFrstRegId(sessionUserId);

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

        String popupSn = mngNtPopupService.selectMaxPopupSn(vo);
        vo.setPopupSn(popupSn);

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

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

        mngNtPopupService.insertPopup(vo);
        resultMap.put("result","succ");
        return ResponseEntity.ok(DefaultApiResponse.success(resultMap));
    }

    @RequestMapping(value = "/MngNtPopupD010.do", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<DefaultApiResponse<Map<String, Object>>> deletePopup(@ModelAttribute MngNtPopupVO vo) throws Exception{
        int result = mngNtPopupService.deletePopup(vo);
        Map<String, Object> resultMap = new HashMap<String, Object>();
        if(result > 0){
            //첨부파일 삭제
            RdmComAttachfileVO fvo = new RdmComAttachfileVO();
            String tblNam = "CMT_POPUP_NTCE";
            String datSeq = vo.getPopupSn();
            fvo.setTblNam(tblNam);
            fvo.setDatSeq(datSeq);
            rdmComAttachfileService.deleteAttachfileAll(fvo);
            resultMap.put("result", "succ");
        }else{
            resultMap.put("result", "fail");
        }

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