package incheon.ags.ias.srvy.srvyQitemArtcl.web;

import incheon.ags.ias.srvy.srvyQitemArtcl.service.SrvyQitemArtclService;
import incheon.ags.ias.srvy.srvyQitemArtcl.vo.SrvyQitemArtclVO;
import incheon.ags.ias.srvy.srvyQitemArtcl.vo.SrvyQitemArtclSearchVO;
import incheon.ags.ias.srvy.srvyQitem.service.SrvyQitemService;
import incheon.ags.ias.srvy.srvyQitem.vo.SrvyQitemVO;
import incheon.com.security.annotation.RequireRole;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.Map;

/**
 * 설문조사 문항 선택지 관리 Controller
 * - 설문조사 문항 선택지 정보 관리 웹 페이지
 */
@Controller
@RequiredArgsConstructor
@Slf4j
@RequireRole(system = "AGS", roles = "ROLE_SUPER_ADMIN", description = "통합관리자 역할 접근 제어")
public class SrvyQitemArtclController {
    private final SrvyQitemService srvyQitemService;
    private final SrvyQitemArtclService srvyQitemArtclService;

    /**
     * 설문조사 문항 선택지 목록 조회
     */
    @GetMapping("/ags/ias/srvyQitemArtcl/srvyQitemArtclList.do")
    public String srvyQitemArtclList(
            @RequestParam(defaultValue = "1") int page,
            @ModelAttribute SrvyQitemArtclSearchVO searchVO,
            ModelMap model) throws Exception {


        searchVO.setPageIndex(page);

        PaginationInfo paginationInfo = new PaginationInfo();
        paginationInfo.setCurrentPageNo(page);
        paginationInfo.setRecordCountPerPage(searchVO.getRecordCountPerPage());
        paginationInfo.setPageSize(searchVO.getPageSize());

        searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
        searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
        searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());

        int totalCount = srvyQitemArtclService.selectSrvyQitemArtclListTotCnt(searchVO);
        model.addAttribute("totalCount", totalCount);
        paginationInfo.setTotalRecordCount(totalCount);

        List<SrvyQitemArtclVO> srvyQitemArtclList = srvyQitemArtclService.selectSrvyQitemArtclList(searchVO);
        model.addAttribute("srvyQitemArtclList", srvyQitemArtclList);
        model.addAttribute("searchVO", searchVO);
        model.addAttribute("paginationInfo", paginationInfo);

        return "/ags/ias/srvy/srvyQitemArtcl/srvyQitemArtclList";
    }

    /**
     * 설문조사 문항 선택지 등록 페이지
     */
    @GetMapping("/ags/ias/srvyQitemArtcl/srvyQitemArtclRegist.do")
    public String srvyQitemArtclRegist(
            @RequestParam(value = "srvyQitemSn", required = false) String srvyQitemSn,
            ModelMap model) throws Exception {

        List<Map<String, Object>> surveyList = srvyQitemService.selectSrvy();
        model.addAttribute("surveyList", surveyList);

        List<Map<String, Object>> questList = srvyQitemArtclService.selectSrvyQitemList();
        model.addAttribute("questList", questList);

        model.addAttribute("srvyQitemSn", srvyQitemSn);

        return "/ags/ias/srvy/srvyQitemArtcl/srvyQitemArtclRegist";
    }


    /**
     * 설문조사 문항 선택지 상세 조회
     */
    @GetMapping("/ags/ias/srvyQitemArtcl/srvyQitemArtclDetail.do")
    public String srvyQitemArtclDetail(
            @RequestParam(value = "srvyQitemArtclSn", required = false) String srvyQitemArtclSn,
            ModelMap model) throws Exception {

        SrvyQitemArtclVO vo = new SrvyQitemArtclVO();
        vo.setArtclSn(Integer.parseInt(srvyQitemArtclSn));
        SrvyQitemArtclVO srvyQitemArtclDetail = srvyQitemArtclService.selectSrvyQitemArtclDetail(vo);
        model.addAttribute("resultList", srvyQitemArtclDetail);

        return "/ags/ias/srvy/srvyQitemArtcl/srvyQitemArtclDetail";
    }

    /**
     * 설문조사 문항 선택지 수정 페이지
     */
    @GetMapping("/ags/ias/srvyQitemArtcl/srvyQitemArtclModify.do")
    public String srvyQitemArtclModify(
            @RequestParam(value = "srvyQitemArtclSn", required = false) String srvyQitemArtclSn,
            ModelMap model) throws Exception {

        SrvyQitemArtclVO vo = new SrvyQitemArtclVO();
        vo.setArtclSn(Integer.parseInt(srvyQitemArtclSn));
        SrvyQitemArtclVO srvyQitemArtclDetail = srvyQitemArtclService.selectSrvyQitemArtclDetail(vo);
        model.addAttribute("surveySrvyQitemArtclMngVO", srvyQitemArtclDetail);

        List<Map<String, Object>> surveyList = srvyQitemService.selectSrvy();
        model.addAttribute("surveyList", surveyList);

        List<Map<String, Object>> questList = srvyQitemArtclService.selectSrvyQitemList();
        model.addAttribute("questList", questList);

        return "/ags/ias/srvy/srvyQitemArtcl/srvyQitemArtclModify";
    }

    /**
     * 설문조사 문항 선택지 등록/수정 팝업 화면 (레이어팝업용)
     */
    @GetMapping("/ags/ias/srvyQitemArtcl/srvyQitemArtclDetailPopup.do")
    public String srvyQitemArtclDetailPopup(
            @RequestParam("srvyQitemSn") String srvyQitemSn,
            @RequestParam(value = "srvyQitemArtclSn", required = false) String srvyQitemArtclSn,
            @RequestParam(value = "mode", defaultValue = "create") String mode,
            @RequestParam(value = "qitemTypeCd", required = false) String qitemTypeCd,
            @RequestParam(value = "qitemCn", required = false) String qitemCn,
            @RequestParam(value = "maxChcCo", required = false) String maxChcCo,
            ModelMap model) throws Exception {

        try {
            model.addAttribute("srvyQitemSn", srvyQitemSn);
            model.addAttribute("mode", mode);
            
            // 문항 정보 조회 (서버에서 직접 조회)
            SrvyQitemVO qitemVO = new SrvyQitemVO();
                qitemVO.setQitemSn(Integer.parseInt(srvyQitemSn));
            SrvyQitemVO qitemDetail = srvyQitemService.selectSrvyQitemDetail(qitemVO);
            
            if (qitemDetail != null) {
                model.addAttribute("qitemTypeCd", qitemDetail.getQitemTypeCd());
                model.addAttribute("qitemCn", qitemDetail.getQitemCn());
                model.addAttribute("maxChcCo", qitemDetail.getMaxChcCo());
            } else {
                // 파라미터로 전달된 값 사용 (fallback)
                model.addAttribute("qitemTypeCd", qitemTypeCd);
                model.addAttribute("qitemCn", qitemCn);
                model.addAttribute("maxChcCo", maxChcCo);
            }

            // 수정 모드인 경우 선택지 상세 조회
            if ("edit".equals(mode) && StringUtils.hasText(srvyQitemArtclSn)) {
                SrvyQitemArtclVO vo = new SrvyQitemArtclVO();
                vo.setArtclSn(Integer.parseInt(srvyQitemArtclSn));
                SrvyQitemArtclVO srvyQitemArtclDetail = srvyQitemArtclService.selectSrvyQitemArtclDetail(vo);

                if (srvyQitemArtclDetail != null) {
                    model.addAttribute("srvyQitemArtclDetail", srvyQitemArtclDetail);
                } else {
                    log.error("해당 선택지를 찾을 수 없습니다. srvyQitemArtclSn: {}", srvyQitemArtclSn);
                    model.addAttribute("mode", "create");
                    model.addAttribute("errorMessage", "해당 선택지를 찾을 수 없어 등록 모드로 전환됩니다.");
                }
            }

        } catch (Exception e) {
            log.error("srvyQitemArtclDetailPopup 처리 중 오류 발생", e);
            model.addAttribute("mode", "create");
            model.addAttribute("errorMessage", "팝업 로딩 중 오류가 발생했습니다: " + e.getMessage());
        }

        return "/ags/ias/srvy/srvyQitemArtcl/srvyQitemArtclDetailPopup";
    }

}