package incheon.ags.ias.popupNtc.web;

import incheon.ags.ias.popupNtc.service.PopupNtcService;
import incheon.ags.ias.popupNtc.vo.PopupNtcSearchVO;
import incheon.ags.ias.popupNtc.vo.PopupNtcVO;
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.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestParam;

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

@Controller
@RequiredArgsConstructor
@Slf4j
@RequireRole(system = "AGS", roles = {"ROLE_SUPER_ADMIN", "ROLE_AGS_ADMIN"}, description = "통합관리자 역할 접근 제어")
public class PopupNtcController {

    private final PopupNtcService popupNtcService;

    @GetMapping("/ags/ias/popupNtc/popupNtcList.do")
    public String popupNtcList(
            @RequestParam(defaultValue = "1") int page,
            @ModelAttribute PopupNtcSearchVO searchVO,
            ModelMap model) throws Exception {

        // 1. 총 개수 조회
        int totalCount = popupNtcService.selectPopupNtcListTotCnt(searchVO);

        // 2. 페이징 설정
        searchVO.setPageIndex(page);
        PaginationInfo paginationInfo = new PaginationInfo();
        paginationInfo.setCurrentPageNo(page);
        paginationInfo.setRecordCountPerPage(searchVO.getRecordCountPerPage());
        paginationInfo.setPageSize(searchVO.getPageSize());
        paginationInfo.setTotalRecordCount(totalCount);

        // 3. 페이징 파라미터 설정
        searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
        searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
        searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());

        // 4. 팝업공지 리스트 조회
        List<Map<String, Object>> popupNtcList = popupNtcService.selectPopupNtcList(searchVO);

        model.addAttribute("popupNtcList", popupNtcList);
        model.addAttribute("totalCount", totalCount);
        model.addAttribute("paginationInfo", paginationInfo);
        model.addAttribute("searchVO", searchVO);

        log.info("페이지: {}, 시작: {}, 페이지당개수: {}, 총개수: {}, 조회개수: {}",
                page, searchVO.getFirstIndex(), searchVO.getRecordCountPerPage(),
                totalCount, popupNtcList.size());

        return "ags/ias/popupNtc/popupNtcList";
    }

    @GetMapping("/ags/ias/popupNtc/popupNtcDetail.do")
    public String popupNtcDetail(
            @RequestParam Long popupNtcSn,
            ModelMap model) throws Exception {

        PopupNtcVO popupNtcVO = popupNtcService.selectPopupNtcDetail(popupNtcSn);
        model.addAttribute("popupNtcVO", popupNtcVO);

        return "ags/ias/popupNtc/popupNtcDetail";
    }

    @GetMapping("/ags/ias/popupNtc/popupNtcRegist.do")
    public String popupNtcRegist(ModelMap model) throws Exception {

        model.addAttribute("mode", "insert");

        return "ags/ias/popupNtc/popupNtcRegist";
    }

    @GetMapping("/ags/ias/popupNtc/popupNtcModify.do")
    public String popupNtcModify(
            @RequestParam Long popupNtcSn,
            ModelMap model) throws Exception {

        PopupNtcVO popupNtcVO = popupNtcService.selectPopupNtcDetail(popupNtcSn);
        model.addAttribute("popupNtcVO", popupNtcVO);

        model.addAttribute("mode", "update");

        return "ags/ias/popupNtc/popupNtcModify";
    }
}
