package itn.let.fax.user.web;

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

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

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import itn.com.cmm.LoginVO;
import itn.com.cmm.util.FileUtil;
import itn.com.cmm.util.PdfUtil;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.fax.addr.service.FaxAddrService;
import itn.let.fax.addr.service.FaxAddrVO;
import itn.let.fax.user.service.FaxConvertVO;
import itn.let.fax.user.service.FaxGroupDataVO;
import itn.let.fax.user.service.FaxService;
import itn.let.mjo.msgdata.service.MjonMsgDataService;

@Controller
public class FaxController {
	
	
    private static final Logger logger = LoggerFactory.getLogger(FaxController.class);

	@Resource(name = "faxService")
	private FaxService faxService;
	
	@Resource (name = "FaxAddrService")
	private FaxAddrService faxAddrService;
	
	@Resource(name = "MjonMsgDataService")
	private MjonMsgDataService mjonMsgDataService;
	/** fax 변환 파일 저장 경로*/
	@Value("#{globalSettings['Globals.fax.file.convert.path']}")
	private String FAX_CONVERT_FILE_PATH;
	
	/** 
	 * @methodName	: selectFaxDataView 
	 * @author		: 이호영
	 * @date		: 2023.02.07 
	 * @description	: 
	 * @param cateCode
	 * @param request
	 * @param model
	 * @param redirectAttributes
	 * @return
	 * @throws Exception 
	 */
	@RequestMapping(value= {"/web/mjon/fax/faxDataView.do"})
	public String faxDataView(HttpServletRequest request, ModelMap model
			,FaxAddrVO faxAddrVO, RedirectAttributes redirectAttributes) throws Exception{
		
		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
    	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
    	if(StringUtils.isEmpty(userId)) { 
			return "redirect:/web/user/login/login.do";
    	}
    	// TODO 미로그인 시 로그인 페이지로 이동 처리
		model.addAttribute("loginVO", loginVO);
		
		//주소록에서 전달 받은 주소록 정보 조회하기
		String moveAddrFlag = faxAddrVO.getMoveAddrFlag();
		String moveAddrAllFlag = faxAddrVO.getMoveAddrAllFlag();
		
		if(moveAddrFlag == null || moveAddrFlag.equals("")) {
			moveAddrFlag = "N";
		}
		
		if(moveAddrAllFlag == null || moveAddrAllFlag.equals("")) {
			moveAddrAllFlag = "N";
		}
		
		List<String> addrIdList = faxAddrVO.getAddrIdList();
		List<String> tempList = new ArrayList<String>();
		List<FaxAddrVO> resultFaxAddrList = new ArrayList<FaxAddrVO>();
		List<String> addrNmList = new ArrayList<String>();
		List<String> addrPhoneNoList = new ArrayList<String>();
		int listCnt = 0;
		//주소록 선택 전송시
		if(moveAddrFlag.equals("Y")) {
			
			for(String seqStr : addrIdList) {
				
				String seqId = seqStr.replace("[", "");
				seqId = seqId.replace("]", "");
				
				tempList.add(seqId);
			}
			
			faxAddrVO.setAddrIdList(tempList);
			faxAddrVO.setMberId(userId);
			resultFaxAddrList = faxAddrService.selectFaxAddrDataList(faxAddrVO);
			
			for(FaxAddrVO tmp : resultFaxAddrList) {
				
				addrNmList.add(tmp.getAddrNm());
				addrPhoneNoList.add(tmp.getAddrPhoneNo());
				
			}
			
			listCnt = resultFaxAddrList.size();
			
		}
		
		//주소록 전체 전송시
		if(moveAddrAllFlag.equals("Y")) {
			FaxAddrVO faxAddrAllVO = new FaxAddrVO();
			
			faxAddrAllVO.setMberId(userId);
			faxAddrAllVO.setRecordCountPerPage(100000);
			faxAddrAllVO.setFirstIndex(0);
			faxAddrAllVO.setSearchAddrGrpId(request.getParameter("searchAddrGrpId"));
			faxAddrAllVO.setSearchCondition(request.getParameter("searchCondition"));
			faxAddrAllVO.setSearchKeyword(request.getParameter("searchKeyword"));
			faxAddrAllVO.setStartKeyword(request.getParameter("startKeyword"));
			List<FaxAddrVO> reaultaddrAllList = faxAddrService.selectFaxAddrList(faxAddrAllVO);
			
			for(FaxAddrVO tmpAll : reaultaddrAllList) {
				
				addrNmList.add(tmpAll.getAddrNm());
				addrPhoneNoList.add(tmpAll.getAddrPhoneNo());
				
			}
			
			listCnt = reaultaddrAllList.size();
		}	
		
		/* 목록을 가져 온다 */
		Map<String, Object> faxDataViewMap = faxService.selectFaxDataView(userId);
    	//최근 전송내역
		model.addAttribute("resultLatestMsgList", faxDataViewMap.get("resultLatestMsgList"));
		//자주보내는 번호
		model.addAttribute("resultBookMarkMsgList", faxDataViewMap.get("resultBookMarkMsgList"));
		//사용자 보유 잔액
		model.addAttribute("userMoney", faxDataViewMap.get("userMoney"));
		//단가
		model.addAttribute("faxPrice", faxDataViewMap.get("faxPrice"));
		
		//주소록에서 전달 받은 주소록 정보 
		model.addAttribute("addrNmList", addrNmList);
		model.addAttribute("addrPhoneNoList", addrPhoneNoList);
		model.addAttribute("resultFaxAddrListCnt", listCnt);
		model.addAttribute("moveAddrFlag", moveAddrFlag);
		model.addAttribute("moveAddrAllFlag", moveAddrAllFlag);
		

		return "/web/fax/faxDataView";
	}
	@RequestMapping(value= {"/web/mjon/fax/faxSendList.do"})
	public String faxSendList(@ModelAttribute("searchVO") FaxGroupDataVO faxGroupDataVO
			, ModelMap model) throws Exception{
		
		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());

    	if(StringUtils.isEmpty(userId)) { 
			return "redirect:/web/user/login/login.do";
    	}
		model.addAttribute("loginVO", loginVO);
		
		try {

			/* 목록을 가져 온다 */
			faxGroupDataVO.setUserId(userId);
			Map<String, Object> faxSendListMap = faxService.selectFaxSendList(faxGroupDataVO);
	    	// 전송내역
			model.addAttribute("faxGroupListVO", faxSendListMap.get("faxGroupListVO"));
	    	model.addAttribute("searchKeyword", faxSendListMap.get("searchKeyword"));
	    	model.addAttribute("paginationInfo", faxSendListMap.get("paginationInfo"));	
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
		
		
		return "/web/fax/faxSendList";
	}
	
	/** 
	 * @methodName	: faxSendDetailList 
	 * @author		: 이호영
	 * @date		: 2023.04.05 
	 * @description	: 상세 팝업 
	 * @param faxGroupDataVO
	 * @param model
	 * @return
	 * @throws Exception 
	 */
	@RequestMapping(value= {"/web/mjon/fax/faxSendDetailPopup.do"})
	public String faxSendDetailList(@ModelAttribute("searchVO") FaxGroupDataVO faxGroupDataVO
			, ModelMap model) throws Exception{
		
		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
		
		if(StringUtils.isEmpty(userId)) { 
			return "redirect:/web/user/login/login.do";
		}
		model.addAttribute("loginVO", loginVO);


		/* 목록을 가져 온다 */
		faxGroupDataVO.setUserId(userId);
			
		Map<String, Object> resultMap = faxService.selectFaxSendDetailList(faxGroupDataVO);
		// 전송내역
		model.addAttribute("faxDetailListVO", resultMap.get("faxDetailListVO"));
		model.addAttribute("paginationInfo", resultMap.get("paginationInfo"));
		
		return "/web/fax/faxSendDetailPopup";
	}
	
	/** 
	 * @methodName	: pdfPreview 
	 * @author		: 이호영
	 * @date		: 2023.04.06 
	 * @description	: pdf 미리보기 / [상세 팝업]문서보기 
	 * @param response
	 * @param faxConvertVO
	 * @throws Exception 
	 */
	@RequestMapping(value= {"/web/mjon/fax/pdfPreview.do"})
	public void pdfPreview(HttpServletResponse response, FaxConvertVO faxConvertVO) throws Exception{

		String pdfFileName = faxConvertVO.getFaxConvertFilePath();
		
		if(pdfFileName.indexOf("/") < 0)
			pdfFileName = FAX_CONVERT_FILE_PATH+"/" + pdfFileName;
		
		PdfUtil.showPdf(response, pdfFileName);
	}
	
	/** 
	 * @methodName	: tifDownload 
	 * @author		: 이호영
	 * @date		: 2023.04.06 
	 * @description	: tif 파일 다운로드
	 * @param response
	 * @param faxConvertVO
	 * @throws Exception 
	 */
	@RequestMapping(value= {"/web/mjon/fax/tifDownload.do"})
	public void tifDownload(HttpServletResponse response, FaxConvertVO faxConvertVO) throws Exception{
		String fileInfo = faxConvertVO.getFaxConvertFilePath();
		
		if(fileInfo.indexOf("/") < 0)
			fileInfo = FAX_CONVERT_FILE_PATH+"/" + fileInfo;
		FileUtil.downLoad(response, fileInfo, "");
	}

	
	/** 
	 * @methodName	: getExcelForFaxSendList 
	 * @author		: 이호영
	 * @date		: 2023.04.07 
	 * @description	: 팩스 전송리스트 엑셀 다운로드
	 * @param faxGroupDataVO
	 * @throws Exception 
	 */
	@RequestMapping(value= {"/web/mjon/fax/getExcelForFaxSendList.do"})
	public void getExcelForFaxSendList( FaxGroupDataVO faxGroupDataVO) throws Exception{

		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());

		/* 목록을 가져 온다 */
		faxGroupDataVO.setUserId(userId);
		faxService.getExcelForFaxSendList(faxGroupDataVO);
	}
	
	/** 
	 * @methodName	: printfaxSentDataAjax 
	 * @author		: 이호영
	 * @date		: 2023.04.07 
	 * @description	: 팩스 전송결과 출력하기
	 * @param faxGroupDataVO
	 * @throws Exception 
	 */
	@RequestMapping(value= {"/web/mjon/fax/printfaxSentDataAjax.do"})
	public String printfaxSentDataAjax( FaxGroupDataVO faxGroupDataVO
			, ModelMap model) throws Exception{

		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
    	String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName());

		/* 목록을 가져 온다 */
		faxGroupDataVO.setUserId(userId);
		Map<String, Object> resultMap = faxService.printfaxSentDataAjax(faxGroupDataVO);

		model.addAttribute("faxGroupListVO", resultMap.get("faxGroupListVO"));
		model.addAttribute("dateMap", resultMap.get("dateMap"));
		model.addAttribute("userNm", userNm);
		
		
		return "web/fax/faxSentPrintListPopUp";
	}
	
	@RequestMapping(value= {"/web/mjon/fax/faxSendListAjax.do"})
	public String faxSendListAjax(@ModelAttribute("searchVO") FaxGroupDataVO faxGroupDataVO
			, ModelMap model) throws Exception{
		
		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());

    	if(StringUtils.isEmpty(userId)) { 
			return "redirect:/web/user/login/login.do";
    	}
		model.addAttribute("loginVO", loginVO);
		
		/* 목록을 가져 온다 */
		faxGroupDataVO.setUserId(userId);
		FaxGroupDataVO faxFileInfo = faxService.selectFaxSendDetailInfo(faxGroupDataVO);
		
		// 전송내역
		model.addAttribute("faxFileInfo", faxFileInfo);
		
		return "/web/fax/faxSentListPopAjax";
	}
}
