package itn.let.mjo.kisa.web;

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

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
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.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.ComDefaultCodeVO;
import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.LoginVO;
import itn.com.cmm.service.EgovCmmUseService;
import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.service.FileVO;
import itn.let.mjo.kisa.service.KisaService;
import itn.let.mjo.kisa.service.KisaVO;

/**
 * 주소록 관한 controller 클래스를 정의한다.
 * @author ITN
 * @since 2021.04.08
 * @version 1.0
 * @see
 *
 * <pre>
 * << 개정이력(Modification Information) >>
 *
 *   수정일      수정자           수정내용
 *  -------    --------    ---------------------------
 *   2021.04.08  ITN          최초 생성
 *
 * </pre>
 */
@Controller
public class KisaController {
	
	@Resource(name = "KisaService")
    private KisaService kisaService;
	
	/** EgovMessageSource */
    @Resource(name="egovMessageSource")
    EgovMessageSource egovMessageSource;
    
    @Resource(name="EgovFileMngUtil")
	private EgovFileMngUtil fileUtil;
    
    @Resource(name="EgovFileMngService")
    private EgovFileMngService fileMngService;
    
    @Resource(name = "EgovFileMngService")
	private EgovFileMngService fileService;
    
    @Resource(name = "EgovCmmUseService")
    private EgovCmmUseService cmmUseService;

	private static final Logger LOGGER = LoggerFactory.getLogger(KisaController.class);

	
	
	/**
     * kisa 목록 페이지
     * @param kisaVO
     * @param model
     * @return "/kisa/kisa/KisaList"
     * @throws Exception
     */
	@RequestMapping(value="/kisa/kisa/KisaList.do")
	public String kisaList(@ModelAttribute("kisaVO") KisaVO kisaVO, 
			HttpServletRequest request ,
			ModelMap model) throws Exception{
		
		
		
		if(kisaVO.getPageUnit() != 10) {
			kisaVO.setPageUnit(kisaVO.getPageUnit());
		}

		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(kisaVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(kisaVO.getPageUnit());
		paginationInfo.setPageSize(kisaVO.getPageSize());
		
		kisaVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		kisaVO.setLastIndex(paginationInfo.getLastRecordIndex());
		kisaVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		if("".equals(kisaVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			kisaVO.setSearchSortCnd("kisaId");
			kisaVO.setSearchSortOrd("desc");
		}
		
        List<KisaVO> kisaList = kisaService.selectKisaList(kisaVO);
        int totCnt = 0;
        if(kisaList.size() > 0) {
			totCnt = kisaList.get(0).getTotcnt();
		}
        model.addAttribute("kisaList", kisaList);
        
        paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);
		
		return "/kisa/kisa/KisaList";
        
	}
	
	/**
	 * 게시물에 대한 상세 정보를 조회한다.
	 *
	 * @param KisaVO
	 * @param model
	 * @return 
	 * @throws Exception
	 */
	@RequestMapping("/kisa/kisa/selectKisaArticle.do")
	public String selectBoardArticle(@ModelAttribute("searchVO") KisaVO kisaVO, ModelMap model , RedirectAttributes redirectAttributes) throws Exception {
		LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();

		
		// 삭제 및 노 데이터 조회 시
		if (kisaVO == null) {
			redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("info.nodata.msg"));
			redirectAttributes.addAttribute("pageIndex", kisaVO.getPageIndex());
			return "redirect:/kisa/kisa/KisaList.do";
		}
		
		kisaVO = kisaService.selectKisaDetail(kisaVO);
		
		if(kisaVO.getPageUnit() != 10) {
			kisaVO.setPageUnit(kisaVO.getPageUnit());
		}

		List<KisaVO> kisaPastListVO = kisaService.selectKisaIdPastList(kisaVO);
		KisaVO kisapastVO = kisaVO;
		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(kisapastVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(kisapastVO.getPageUnit());
		paginationInfo.setPageSize(kisapastVO.getPageSize());
		
		kisapastVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		kisapastVO.setLastIndex(paginationInfo.getLastRecordIndex());
		kisapastVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		if("".equals(kisapastVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			kisapastVO.setSearchSortCnd("kisaId");
			kisapastVO.setSearchSortOrd("desc");
		}
        
		int totCnt = 0;
        if(kisaPastListVO.size() > 0) {
			totCnt = kisaPastListVO.get(0).getTotcnt();
		}
        paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);
		
		if(kisaVO.getAtchFileId() !=null) {
			FileVO fileVO = new FileVO();
			fileVO.setAtchFileId(kisaVO.getAtchFileId());
			List<FileVO> fileList = fileService.selectFileInfs(fileVO);
			model.addAttribute("fileList", fileList);	
		}
		
		// 소명자료 List
		if(kisaVO.getAtchFileId2() !=null) {
			FileVO fileVO = new FileVO();
			fileVO.setAtchFileId(kisaVO.getAtchFileId2());
			List<FileVO> fileList2 = fileService.selectFileInfs(fileVO);
			model.addAttribute("fileList2", fileList2);	
		}
		
		ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO();
		//평가참여횟수 코드 조회
		comDefaultCodeVO.setCodeId("ITN034");
		List<?> codeResult = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO);
		model.addAttribute("codeResult", codeResult);
		
		if(!"".equals(kisaVO.getKisaWarnMessage()) && kisaVO.getKisaWarnMessage() != null) {
			String[] chk = kisaVO.getKisaWarnMessage().split(",");
			model.addAttribute("chk", chk);
		}
		
		model.addAttribute("kisaVO", kisaVO);
		model.addAttribute("kisapastVO", kisapastVO);
		model.addAttribute("kisaPastListVO", kisaPastListVO);

		return "/kisa/kisa/KisaDetail";
	}
	
	/**
     * kisa 등록 페이지
     * @param kisaVO
     * @param model
     * @return "/kisa/kisa/KisaRegist"
     * @throws Exception
     */
	@RequestMapping(value="/kisa/kisa/kisaRegist.do")
	public String kisaRegist(@RequestParam Map<?, ?> commandMap, @ModelAttribute("kisaVO") KisaVO kisaVO,
            HttpServletRequest request, HttpServletResponse response, 
            RedirectAttributes redirectAttributes  , Model model , HttpSession session) throws Exception{
		
		ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO();
		//평가참여횟수 코드 조회
		comDefaultCodeVO.setCodeId("ITN034");
		List<?> codeResult = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO);
		model.addAttribute("codeResult", codeResult);
	    
		return "/kisa/kisa/KisaRegist";
        
	}
	
	/**
     * KISA 등록 Ajax
     * @param kisaVO
     * @param model
     * @return modelAndView
     * @throws Exception
     */
	@RequestMapping(value = {"/kisa/kisa/insertKisaAjax.do"})
	public ModelAndView insertKisaAjax(final MultipartHttpServletRequest multiRequest
			, KisaVO kisaVO
			, RedirectAttributes redirectAttributes
			, HttpServletRequest request) throws Exception {
		
		LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
		
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		String atchFileId = "";
		final Map<String, MultipartFile> files = multiRequest.getFileMap();
		if (!files.isEmpty()) {
			List<FileVO> result = fileUtil.parseFileInf(files, "KISA_", 0, "", "", "");
			atchFileId = fileMngService.insertFileInfs(result);
			kisaVO.setAtchFileId(atchFileId);
		}
		
		kisaVO.setFrstRegisterId(user.getId());
		kisaService.insertKisa(kisaVO);
		
		modelAndView.addObject("result", "success");
		return modelAndView;
	}
	
	/**
     * KISA 수정 Ajax
     * @param kisaVO
     * @param model
     * @return modelAndView
     * @throws Exception
     */
	@RequestMapping(value = {"/kisa/kisa/updateKisaAjax.do"})
	public ModelAndView updateKisaAjax(final MultipartHttpServletRequest multiRequest
			, KisaVO kisaVO
			, RedirectAttributes redirectAttributes
			, HttpServletRequest request) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		String atchFileId = "";
		final Map<String, MultipartFile> files = multiRequest.getFileMap();
		
		if (!files.isEmpty()) {
			if ("".equals(atchFileId)) {
				List<FileVO> result = fileUtil.parseFileInf(files, "KISA_", 0, atchFileId, "", "");
				
				atchFileId = fileMngService.insertFileInfs(result);
				kisaVO.setAtchFileId(atchFileId);
			} else {
				FileVO fvo = new FileVO();
				fvo.setAtchFileId(atchFileId);
				int cnt = fileMngService.getMaxFileSN(fvo);
				List<FileVO> result = fileUtil.parseFileInf(files, "KISA_", cnt, atchFileId, "", "");
				
				fileMngService.updateFileInfs(result);
			}
		}
		
		kisaService.updateKisa(kisaVO);
		
		modelAndView.addObject("result", "success");
		return modelAndView;
	}
	
	/**
     * KISA 리스트 팝업 유무 Ajax
     * @param kisaVO
     * @param model
     * @return modelAndView
     * @throws Exception
     */
	@RequestMapping(value = {"/kisa/kisa/updateKisaWarnMessageAjax.do"})
	public ModelAndView updateKisaWarnMessageAjax(@ModelAttribute("kisaVO") KisaVO kisaVO
			, RedirectAttributes redirectAttributes
			, HttpServletRequest request) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		kisaService.updateKisaPopupYn(kisaVO);
		
		modelAndView.addObject("result", "success");
		return modelAndView;
	}
	
	
}
