package incheon.ags.por.web;

import java.util.List;

import javax.annotation.Resource;

import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import org.springframework.beans.factory.annotation.Autowired;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.fasterxml.jackson.databind.ObjectMapper;

import incheon.ags.por.service.PorBoardFileService;
import incheon.ags.por.service.PorBoardService;
import incheon.ags.por.service.PorNoticeService;
import incheon.ags.por.vo.PorBoardFileVO;
import incheon.ags.por.vo.PorBoardVO;
import incheon.ags.por.vo.PorFileVO;
import incheon.com.cmm.service.EgovFileMngService;
import lombok.RequiredArgsConstructor;

/**
 * @ClassName : PorArchiveController.java
 * @Description : 공간정보포털 컨트롤러
 *
 * @author : 관리자
 * @since : 2025. 07. 17
 * @version : 1.0
 *
 *          <pre>
 * << 개정이력(Modification Information) >>
 *
 *   수정일              수정자               수정내용
 *  -------------  ------------   ---------------------
 *   2023. 10. 10    관리자               최초 생성
 *   2024. 12. 19    관리자               패널 기반 플랫폼으로 전면 개편
 *   2025. 07. 17    관리자               공간정보포털로 전환
 *          </pre>
 *
 */
@Controller
@RequestMapping("/ags/por")
@RequiredArgsConstructor
public class PorGuideController {
	@Autowired private ObjectMapper objectMapper;
	private final PorBoardService porBoardService;
	private final PorBoardFileService porBoardFileService;
	
	@Resource(name = "EgovFileMngService")
	private EgovFileMngService fileService;
	
    /**
     * 서비스 길라잡이 화면
     * @param model
     * @return JSP 페이지
     * @exception Exception
     */
    @GetMapping("/guide/list.do")
    public String archiveList(
    		@RequestParam(defaultValue = "1") int page
    		, @ModelAttribute PorBoardVO porBoardVO
    		, ModelMap model
		) throws Exception {
    	
    	porBoardVO.setPstKndCd("BBS006");
    	porBoardVO.setPrvtYn(false);
    	
    	int totalCount = porBoardService.selectBoardListCount(porBoardVO);
    	
    	// 페이징정보
    	PaginationInfo paginationInfo = new PaginationInfo();
    	paginationInfo.setTotalRecordCount(totalCount);
    	paginationInfo.setCurrentPageNo(page);
    	paginationInfo.setRecordCountPerPage(porBoardVO.getRecordCountPerPage());
    	paginationInfo.setPageSize(porBoardVO.getPageSize());

    	porBoardVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
    	porBoardVO.setLastIndex(paginationInfo.getLastRecordIndex());
    	porBoardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
    	
    	// 실데이터 조회
    	List<PorBoardVO> boardList = porBoardService.selectBoardList(porBoardVO);
    	
    	model.addAttribute("boardList", boardList);
    	model.addAttribute("paginationInfo", paginationInfo);
    	
    	return "ags/por/guide/list";
    }
    
    /**
     * 서비스 길라잡이 수정 화면
     * @param model
     * @return JSP 페이지
     * @exception Exception
     */
    @GetMapping("/guide/view.do")
    public String archiveView(
    		@ModelAttribute PorBoardVO porBoardVO
    		, ModelMap model
    	) throws Exception {
    	
    	// 데이터 호출
    	PorBoardVO resultVO = porBoardService.selectBoardDetail(porBoardVO);
    	
    	if(resultVO != null) {
    		// 파일 호출
    		PorBoardFileVO fVo = new PorBoardFileVO();
    		fVo.setBbsUnqKey(porBoardVO.getUnqKey());
    		List<PorFileVO> fileList = porBoardFileService.selectBoardFileList(fVo);
    		if(fileList != null && fileList.size() > 0) {
    			resultVO.setPorFileList(fileList);
			}
    		
    		model.addAttribute("porBoardVO", resultVO);
    		return "ags/por/guide/view";
    	}else {
    		return "error/error";
    	}
    	
    }
    
    /**
     * 서비스 길라잡이 작성 화면
     * @param model
     * @return JSP 페이지
     * @exception Exception
     */
    @GetMapping("/guide/insertForm.do")
    public String archiveInsertForm(ModelMap model) throws Exception {
    	return "ags/por/guide/insert";
    }
    
    /**
     * 서비스 길라잡이 수정 화면
     * @param model
     * @return JSP 페이지
     * @exception Exception
     */
    @GetMapping("/guide/updateForm.do")
    public String archiveUpdateForm(
    		@ModelAttribute PorBoardVO porBoardVO
    		, ModelMap model
    	) throws Exception {
    	// 데이터 호출
    	PorBoardVO resultVO = porBoardService.selectBoardDetail(porBoardVO);
    	
    	if(resultVO != null) {
    		// 파일 호출
    		PorBoardFileVO vo = new PorBoardFileVO();
    		vo.setBbsUnqKey(porBoardVO.getUnqKey());
    		List<PorFileVO> fileList = porBoardFileService.selectBoardFileList(vo);
    		if(fileList != null && fileList.size() > 0) {
    			System.out.println(fileList);
    			String jsonList = objectMapper.writeValueAsString(fileList);
    			model.addAttribute("fileList", jsonList);
    		}
    		model.addAttribute("porBoardVO", resultVO);
    		return "ags/por/guide/update";
    	}else {
    		return "error/error";
    	}
    	
    }
    
}