package incheon.res.rdm.oe.queans.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.app.code.service.UngisAppCodeService;
import incheon.res.rdm.oe.queans.service.RdmOeQueansService;
import incheon.res.rdm.oe.queans.vo.RdmOeQueans;
import incheon.res.rdm.oe.queans.vo.RdmOeQueansVO;
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.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.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

    @Resource
    private RdmOeQueansService rdmOeQueansService;

    @Resource
    private UngisAppCodeService ungisAppCodeService;

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



    @RequestMapping(value = "/RdmOeQueansL010.do")
    public String selectQueansList(@RequestParam(defaultValue = "1") int pageIndex, @ModelAttribute RdmOeQueansVO 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());

        vo.setTypChk("Q");

        List resultList = rdmOeQueansService.selectQueansList(vo);

        model.addAttribute("resultList", resultList);

        int totCnt = rdmOeQueansService.countList(vo);
        paginationInfo.setTotalRecordCount(totCnt);
        model.addAttribute("paginationInfo", paginationInfo);
        model.addAttribute("searchVo", vo);

        //카텍ㅎ리 정보
        List ctgCdeList = ungisAppCodeService.getCodeList("CTG", "RMT_QANA_DT", "Y");
        model.addAttribute("ctgCdeList", ctgCdeList);

        return "res/rdm/oe/queans/RdmOeQueansL010";
    }

    @RequestMapping("/RdmOeQueansC010.do")
    public String insertQueView(@ModelAttribute("loginUser") LoginVO loginVO, @ModelAttribute("rdmOeQueansVO") RdmOeQueansVO vo,
                                ModelMap model) throws Exception {

        String sessionUserNam = loginVO.getUserNm();

        //카텍ㅎ리 정보
        List ctgCdeList = ungisAppCodeService.getCodeList("CTG", "RMT_QANA_DT", "N");
        model.addAttribute("ctgCdeList", ctgCdeList);

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


        return "res/rdm/oe/queans/RdmOeQueansC010";
    }

    @PostMapping( value = "/RdmOeQueansC011.do" )
    public ResponseEntity<DefaultApiResponse<Map<String, Object>>> insertQue(@ModelAttribute("loginUser") LoginVO loginVO,
            @ModelAttribute RdmOeQueansVO vo, HttpServletRequest request
    ) throws Exception {

        String sessionUserId = loginVO.getUserUnqId();

        vo.setTypChk("Q");
        vo.setIncnvnncDclrYn("Q");
        int maxQueSeq = Integer.parseInt(rdmOeQueansService.selectMaxQueSeq(vo));

        vo.setUserAcntMngNo(sessionUserId);
        vo.setQstnSn(new BigDecimal(maxQueSeq + 1));
        vo.setAnsSn(new BigDecimal(0));


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

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

    }

    @RequestMapping("/RdmOeQueansC020.do")
    public String insertAnsView(@ModelAttribute("loginUser") LoginVO loginVO,@ModelAttribute("rdmOeQueansVO") RdmOeQueansVO vo,
                                ModelMap model) throws Exception {

        vo.setUserAcntMngNo(loginVO.getUserUnqId());
        vo.setSsUsrIdn(loginVO.getUserUnqId());

        RdmOeQueans result = rdmOeQueansService.selectQueans(vo);

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

        return "res/rdm/oe/queans/RdmOeQueansC020";
    }

    @PostMapping(value = "/RdmOeQueansC021.do")
    public ResponseEntity<DefaultApiResponse<Map<String, Object>>> insertAns(@ModelAttribute("loginUser") LoginVO loginVO,@ModelAttribute RdmOeQueansVO vo) throws Exception {

        String sessionUserId = loginVO.getUserUnqId();

        vo.setTypChk("Q");
        vo.setIncnvnncDclrYn("Q");
        int maxAnsSeq = Integer.parseInt(rdmOeQueansService.selectMaxAnsSeq(vo));

        vo.setUserAcntMngNo(sessionUserId);
        vo.setAnsSn(new BigDecimal(maxAnsSeq + 1));

        String ansSub = "[답변" + (maxAnsSeq + 1) + "]-" + vo.getIncnvnncDclrTtl();
        vo.setIncnvnncDclrTtl(ansSub);
        vo.setIncnvnncDclrCn(vo.getQnaCttans());


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


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

    @RequestMapping("/RdmOeQueansR010.do")
    public String selectQueans(@ModelAttribute("loginUser") LoginVO loginVO,@ModelAttribute("rdmOeQueansVO") RdmOeQueansVO vo,
                               ModelMap model) throws Exception {

        vo.setUserAcntMngNo(loginVO.getUserUnqId());
        vo.setSsUsrIdn(vo.getUserAcntMngNo());

        if ("Y".equals(vo.getVtpChk())) {
            rdmOeQueansService.updateHitCntAdd(vo);
        }

        RdmOeQueans result = rdmOeQueansService.selectQueans(vo);
        rdmOeQueansService.updateQueansHitcnt(vo);

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

        //첨부파일 등록
        return "res/rdm/oe/queans/RdmOeQueansR010";
    }

    @PostMapping(value = "/RdmOeQueansD010.do")
    public ResponseEntity<DefaultApiResponse<Map<String, Object>>> deleteQueans(
            @ModelAttribute RdmOeQueansVO vo) throws Exception {

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

        int result = 0;

        result = rdmOeQueansService.deleteQueans(vo);

        resultMap.put("result",result);
        resultMap.put("msg","성공");

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

    @RequestMapping("/RdmOeQueansU010.do")
    public String updateQueansView(@ModelAttribute("loginUser") LoginVO loginVO,@ModelAttribute("rdmOeQueansVO") RdmOeQueansVO vo,
                                   ModelMap model) throws Exception {

        vo.setUserAcntMngNo(loginVO.getUserUnqId());
        vo.setSsUsrIdn(loginVO.getUserUnqId());

        if ("Y".equals(vo.getVtpChk())) {
            rdmOeQueansService.updateHitCntAdd(vo);
        }

        //수정할 문의사항 정보
        RdmOeQueans result = rdmOeQueansService.selectQueans(vo);

        RdmOeQueans queInfo = null;
        if (result != null) {
            if (null != result.getQstnSn()) {
                vo.setQstnSn(result.getQstnSn());
                vo.setAnsSn(result.getAnsSn());
                vo.setIncnvnncDclrYn("Q");
                queInfo = rdmOeQueansService.selectQueansByQueInfo(vo);
            }
        }


        List ctgCdeList = ungisAppCodeService.getCodeList("CTG", "RMT_QANA_DT", "N");

        model.addAttribute("rdmOeQueans", result);
        model.addAttribute("rdmOeQueans2", queInfo);
        model.addAttribute("searchVo", vo);
        model.addAttribute("ctgCdeList", ctgCdeList);

        return "res/rdm/oe/queans/RdmOeQueansU010";
    }

    @PostMapping(value = "/RdmOeQueansU011.do")
    public ResponseEntity<DefaultApiResponse<Map<String, Object>>> updateQueans(
            @ModelAttribute RdmOeQueansVO vo) throws Exception {

        int result = rdmOeQueansService.updateQueans(vo);
        Map<String, Object> resultMap = new HashMap<String, Object>();
        if (result <= 0) {
            resultMap.put("result", "fail");
        } else {
            resultMap.put("result", "succ");
        }

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