package itn.let.mail.service.impl;

import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;

import javax.annotation.Resource;

import org.jsoup.Jsoup;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;


import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import itn.com.cmm.EgovMultiPartEmail;
import itn.let.mail.service.EmailItnVO;
import itn.let.mail.service.MailTemplateService;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.uat.uia.service.impl.MberManageDAO;
import itn.let.uat.uia.web.EmailVO;
import itn.let.uat.uia.web.SendLogVO;
import itn.let.uat.uia.web.SendMail;
import itn.let.uss.umt.service.MberManageVO;

@Service("MailTemplateService")
public class MailTemplateServiceImpl  extends EgovAbstractServiceImpl implements MailTemplateService {

	@Value("#{globalSettings['Globals.mailContentFileFolder']}")
	private String MAIL_CONTENT_PATH;

	@Value("#{globalSettings['Globals.itn.file.saveDir']}")
	private String ITN_FILE_SAVE_DIR;

	@Value("#{globalSettings['Globals.itn.recruit.template.url']}")
	private String ITN_RECRUIT_TEMPLATE_URL;
	
	@Value("#{globalSettings['Globals.itn.contact.us.template.url']}")
	private String ITN_CONTACT_US_TEMPLATE_URL;
	
	@Value("#{globalSettings['Globals.itn.mail.to.address']}")
	private String ITN_MAIL_TO_ADDRESS;

	@Resource(name = "egovMultiPartEmail")
	private EgovMultiPartEmail egovMultiPartEmail;
	
	@Resource(name = "mberManageDAO")
	private MberManageDAO mberManageDAO;
	
	//문자발송 서비스
	@Resource(name = "MjonMsgDataService")
	private MjonMsgDataService mjonMsgDataService;
	
	// 휴면회원 메일발송
	public void mailSendMemberDormant() throws Exception {
		//MAIL_CONTENT_PATH = "C:/eGovFrameDev-3.9.0-64bit_ncms/workspace/mjon/src/main/webapp";

		if (MAIL_CONTENT_PATH == null) {
			MAIL_CONTENT_PATH = "";
		}
		
		String mberId = "";
		String mberNm = "";
		String mberEmailAdres = "";
		String loginDt = "";
		String emailTitle = "";
		String emailContent = ""; 
		
		// 로그인 안한지 1년되기 한달전 휴면회원 전환 안내메일 대상자
		List<MberManageVO> mberDormantList = mberManageDAO.selectMberDormantList();
		
		for (MberManageVO item : mberDormantList) {
			mberId = item.getMberId();
			mberNm = item.getMberNm();
			mberEmailAdres = item.getMberEmailAdres();
			loginDt = item.getLoginDt();
			emailTitle = "[문자온] 휴면회원 전환 안내메일";
			
			//mailContent = Jsoup.parse(new File(MAIL_CONTENT_PATH + "/mail/mail_member_dormant.html"), "UTF-8").toString();
			//mailContent = Jsoup.parse(new File(MAIL_CONTENT_PATH + "https://www.munjaon.co.kr/publish/email_form_dormant.html"), "UTF-8").toString();
			//http://localhost/publish/email_form_dormant.html
			emailContent = Jsoup.connect("https://www.munjaon.co.kr/publish/email_form_dormant.html")
                    .data("query", "Java")
                    .userAgent("Mozilla")
                    .cookie("auth", "token")
                    .timeout(3000)
                    .post()
                    .toString();
			
			emailContent = emailContent.replace("[[_UserId_]]", mberId);
			emailContent = emailContent.replace("[[_DormantDate_]]", loginDt);
			
	        System.out.println("mberId : " + mberId + ", mberNm : " + mberNm + ", mberEmailAdres : " + mberEmailAdres + ", loginDt : " + loginDt);
	        System.out.println("mailContent : " + emailContent);

			// 이메일로 보내기
			SendMail sMail = new SendMail();
			EmailVO mailSender = new EmailVO();
			mailSender.setSend_from("noreply@munjaon.co.kr");	// 사용자 이메일 주소
			mailSender.setTitle(emailTitle);					// 메일 제목
			mailSender.setContents(emailContent);				// 메일 내용
			mailSender.setSend_to(mberEmailAdres);				// 발송자 이메일 주소
			// 메일 발송하기
			sMail.sendMail2(mailSender);						
			
			SendLogVO sendLogVO = new SendLogVO();
			
			// 발송 이력 저장 SendType 1:문자로 발송 2:이메일로 발송
			sendLogVO.setSendType("2");
			sendLogVO.setFrstSendInfo(mailSender.getSend_from());//이메일 발신자 정보
			sendLogVO.setReceive(mailSender.getSend_to());		//수신자 정보
			sendLogVO.setContents(emailContent);

			mjonMsgDataService.insertSysMsgLog(sendLogVO);	        
		}		

	}

	@Override
	public StatusResponse mailSendItnRecruitFile(MultipartFile multi) {
		
		String  returnMsg = "";
		HttpStatus status = HttpStatus.OK;
		long size = multi.getSize();

		String originFilename = multi.getOriginalFilename();
		UUID uuid = UUID.randomUUID();
		String fileSaveNm = uuid.toString() + "_" + originFilename;
		
		File saveFile = new File(ITN_FILE_SAVE_DIR, fileSaveNm);
		
		File folder = new File(ITN_FILE_SAVE_DIR);

		System.out.println("saveFile :: "+saveFile);
		try {
			
			if (!folder.exists()) {
				folder.mkdir(); 
				System.out.println("폴더가 생성완료.");
			}
			
			multi.transferTo(saveFile);
			returnMsg = fileSaveNm;
		} catch (IOException e) {
			// TODO: handle exception
			returnMsg = "오류가 발생하였습니다. \n관리자에게 문의해 주세요";
			status = HttpStatus.BAD_REQUEST;
			e.printStackTrace();
		}
		return new StatusResponse(status, returnMsg, originFilename, LocalDateTime.now());
	}

	@Override
	public StatusResponse mailSendItnRecruit(EmailItnVO emailItnVO) {

		System.out.println("emailItnVO :: "+ emailItnVO.toString());
		String  returnMsg = "지원해 주셔서 감사합니다.";
		HttpStatus status = HttpStatus.OK;
		
		String emailContent = "";
		SendMail sMail = new SendMail();
		
		try {
			emailContent = Jsoup.connect(ITN_RECRUIT_TEMPLATE_URL)
						.data("query", "Java")
						.userAgent("Mozilla")
						.cookie("auth", "token")
						.timeout(3000)
						.post()
						.toString();
			
			emailContent = emailContent.replace("[[_Name_]]", emailItnVO.getName())
										.replace("[[_PhoneNumber_]]", emailItnVO.getPhone())
										.replace("[[_Email_]]", emailItnVO.getEmail())
										.replace("[[_Portfolio_]]", emailItnVO.getPortfolio())
										.replace("[[_Field_]]", emailItnVO.getField())
										.replace("[[_Content_]]", emailItnVO.getContent())
										;
			
			// 메일 첨부파일을 위한 절대경로
			String absolutePath = ITN_FILE_SAVE_DIR + emailItnVO.getFileNm();
			// 메일 제목
			String mailTitle = "["+emailItnVO.getField()+"] (주)아이티앤 입사지원 메일 입니다.";

//			return sMail.itnSendMail(new EmailVO(
			sMail.itnSendMail(new EmailVO(
										mailTitle
										, emailContent
										, absolutePath
										, emailItnVO.getOriFileNm()
										, ITN_MAIL_TO_ADDRESS
										, "noreply@munjaon.co.kr"
										));

		} 
		catch (IOException e) {
			returnMsg = "오류가 발생하였습니다. \n관리자에게 문의해 주세요";
			status = HttpStatus.BAD_REQUEST;
			e.printStackTrace();
		}
		catch (Exception e) {
			returnMsg = "오류가 발생하였습니다. \n관리자에게 문의해 주세요";
			status = HttpStatus.BAD_REQUEST;
			e.printStackTrace();
		}
		
		
		
		
		return new StatusResponse(status, returnMsg, LocalDateTime.now());
	}

	@Override
	public StatusResponse mailSendItnContactUs(EmailItnVO emailItnVO) {
		
		String  returnMsg = "문의해 주셔서 감사합니다.\n빠른 시일 내에 답변해 드리겠습니다.";
		HttpStatus status = HttpStatus.OK;
		
		String emailContent = "";
		SendMail sMail = new SendMail();
		
		try {
			emailContent = Jsoup.connect(ITN_CONTACT_US_TEMPLATE_URL)
						.data("query", "Java")
						.userAgent("Mozilla")
						.cookie("auth", "token")
						.timeout(3000)
						.post()
						.toString();
			
			emailContent = emailContent.replace("[[_Title_]]", emailItnVO.getTitle())
										.replace("[[_Name_]]", emailItnVO.getName())
										.replace("[[_Email_]]", emailItnVO.getEmail())
										.replace("[[_Content_]]", emailItnVO.getContent())
										;

			
			
			System.out.println("emailItnVO :: "+emailItnVO.toString());
			// 메일 첨부파일을 위한 절대경로
			String absolutePath = ITN_FILE_SAVE_DIR + emailItnVO.getFileNm();
			// 메일 제목
			String mailTitle = "[(주)아이티앤 문의] "+emailItnVO.getName()+"님의 문의 내용입니다.";
			
			System.out.println("emailItnVO.getOriFileNm() :: ["+emailItnVO.getOriFileNm()+"]");
			
			sMail.itnSendMail(new EmailVO(
										mailTitle
										, emailContent
										, absolutePath
										, emailItnVO.getOriFileNm()
										, ITN_MAIL_TO_ADDRESS
										, "noreply@munjaon.co.kr"
										));

		} 
		catch (IOException e) {
			returnMsg = "오류가 발생하였습니다. \n관리자에게 문의해 주세요";
			status = HttpStatus.BAD_REQUEST;
			e.printStackTrace();
		}
		catch (Exception e) {
			returnMsg = "오류가 발생하였습니다. \n관리자에게 문의해 주세요";
			status = HttpStatus.BAD_REQUEST;
			e.printStackTrace();
		}
		
		
		
		
		return new StatusResponse(status, returnMsg, LocalDateTime.now());
	}	
	
}
