package itn.let.uat.uia.web;

import java.io.File;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpStatus;

import itn.let.mail.service.StatusResponse;

/*import itn.let.uat.uia.web.EmailVO;
import itn.let.uat.uia.web.SMTPAuthenticator;*/

public class SendMail {

	public void sendMail(EmailVO vo) throws Exception {

		try {

			Properties props = new Properties();

			/*
			 * props.put("mail.transport.protocol", "smtp");// 프로토콜 설정
			 * props.put("mail.smtp.host", "smtp.gmail.com");// gmail SMTP 서비스 주소(호스트)
			 * props.put("mail.smtp.port", "465");// gmail SMTP 서비스 포트 설정
			 * props.put("mail.smtp.starttls.enable","true"); // gmail 인증용 Secure Socket
			 * Layer(SSL) 설정 props.setProperty("mail.smtp.socketFactory.class",
			 * "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.auth", "true");//
			 * SMTP 인증을 설정 props.put("mail.debug", "true"); // log를 위한 debug 옵션 추가
			 */

			props.put("mail.smtp.auth", "true");// SMTP 인증을 설정
			props.put("mail.smtp.starttls.enable", "true");
			// props.put("mail.transport.protocol", "smtp");// 프로토콜 설정
			props.put("mail.smtp.host", "smtp.gmail.com");// gmail SMTP 서비스 주소(호스트)
			props.put("mail.smtp.port", "587");// gmail SMTP 서비스 포트 설정
			props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
			props.put("mail.smtp.ssl.protocols", "TLSv1.2");
//			props.put("mail.smtp.debug", "true");
			// gmail 인증용 Secure Socket Layer(SSL) 설정
			props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

			// 인증정보
			Authenticator auth = new SMTPAuthenticator();

			Session mailSession = Session.getDefaultInstance(props, auth);

			// MimeMessage mailMessage = mailImpl.createMimeMessage();

			MimeMessage message = new MimeMessage(mailSession);

			InternetAddress from = new InternetAddress(vo.getSend_from());
			message.setFrom(from);
			message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(vo.getSend_to()));
			message.setSubject(vo.getTitle());
			message.setContent(vo.getContents(), "text/html;charset=UTF-8");
			// message.setText(vo.getContents());
			message.setSentDate(new Date());

			Transport.send(message);

		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}

	public void sendMail2(EmailVO vo) throws Exception {

		try {

			Properties props = new Properties();

			/*
			 * props.put("mail.transport.protocol", "smtp");// 프로토콜 설정
			 * props.put("mail.smtp.host", "smtp.gmail.com");// gmail SMTP 서비스 주소(호스트)
			 * props.put("mail.smtp.port", "465");// gmail SMTP 서비스 포트 설정
			 * props.put("mail.smtp.starttls.enable","true"); // gmail 인증용 Secure Socket
			 * Layer(SSL) 설정 props.setProperty("mail.smtp.socketFactory.class",
			 * "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.auth", "true");//
			 * SMTP 인증을 설정 props.put("mail.debug", "true"); // log를 위한 debug 옵션 추가
			 */

//			props.put("mail.smtp.auth", "true");// SMTP 인증을 설정
//			props.put("mail.smtp.starttls.enable","true");
//			//props.put("mail.transport.protocol", "smtp");// 프로토콜 설정
//			props.put("mail.smtp.host", "smtp.worksmobile.com");// gmail SMTP 서비스 주소(호스트)
//			props.put("mail.smtp.port", "587");// gmail SMTP 서비스 포트 설정
//			/*props.put("mail.smtp.ssl.trust","smtp.gmail.com");
//			props.put("mail.smtp.ssl.protocols", "TLSv1.2");*/
//			props.put("mail.smtp.starttls.enable","true");
//			props.put("mail.smtp.debug", "true");
			// gmail 인증용 Secure Socket Layer(SSL) 설정
//			props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");

			// worksmobile 계정 설정
			props.put("mail.smtp.host", "smtp.worksmobile.com");
			props.put("mail.smtp.socketFactory.port", "465");
			props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
			props.put("mail.smtp.auth", "true");
			props.put("mail.smtp.port", "465");
			props.put("mail.smtp.ssl.enable", "true");
			props.put("mail.smtp.ssl.trust", "smtp.worksmobile.com");
			props.put("mail.smtp.ssl.protocols", "TLSv1.2");
//			props.put("mail.smtp.debug", "true");

			// 인증정보
			Authenticator auth = new SMTPAuthenticator();

			Session mailSession = Session.getDefaultInstance(props, auth);

			/*
			 * Session mailSession = Session.getInstance(props, new
			 * javax.mail.Authenticator() { protected PasswordAuthentication
			 * getPasswordAuthentication() { return new
			 * PasswordAuthentication("noreply@munjaon.co.kr", "easytour7!"); } });
			 */

//			mailSession.setDebug(true);

			// MimeMessage mailMessage = mailImpl.createMimeMessage();

			MimeMessage message = new MimeMessage(mailSession);

			InternetAddress from = new InternetAddress(vo.getSend_from());
			message.setFrom(from);
			message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(vo.getSend_to()));
			message.setSubject(vo.getTitle());
			message.setContent(vo.getContents(), "text/html;charset=UTF-8");
			// message.setText(vo.getContents());
			message.setSentDate(new Date());

			Transport.send(message);

		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}

//	public SuccessResponse itnSendMail(EmailVO vo) throws Exception {
	public void itnSendMail(EmailVO vo) throws Exception {

		Properties props = new Properties();

		String  returnMsg = "지원해 주셔서 감사합니다.";
		HttpStatus status = HttpStatus.OK;

		// worksmobile 계정 설정
		props.put("mail.smtp.host", "smtp.worksmobile.com");
		props.put("mail.smtp.socketFactory.port", "465");
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.port", "465");
		props.put("mail.smtp.ssl.enable", "true");
		props.put("mail.smtp.ssl.trust", "smtp.worksmobile.com");
		props.put("mail.smtp.ssl.protocols", "TLSv1.2");
		
//		props.put("mail.smtp.debug", "true");


		// 인증정보
		Authenticator auth = new SMTPAuthenticator();
		Session mailSession = Session.getDefaultInstance(props, auth);
		Multipart mp = new MimeMultipart();

		// 파일 영역
		if(StringUtils.isNotEmpty(vo.getAtch_file_name()))
		{
			System.out.println(" IN vo.getAtch_file_name() :: "+vo.getAtch_file_name());
			MimeBodyPart mailFile = new MimeBodyPart();
			FileDataSource fds = new FileDataSource(new File(vo.getAtch_file_path()).getAbsolutePath());
			mailFile.setDataHandler(new DataHandler(fds));
			mailFile.setFileName(MimeUtility.encodeText(vo.getAtch_file_name(), "euc-kr","B"));
			mp.addBodyPart(mailFile);
		}

		//메일 영역
		MimeBodyPart mailInfo = new MimeBodyPart();
		mailInfo.setContent(vo.getContents(), "text/html; charset=UTF-8");
		mp.addBodyPart(mailInfo);
		
//		mailSession.setDebug(true);
		MimeMessage message = new MimeMessage(mailSession);

		message.setFrom(new InternetAddress(vo.getSend_from()));
		message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(vo.getSend_to()));
		message.setSubject(vo.getTitle());
		message.setContent(vo.getContents(), "text/html;charset=UTF-8");
		message.setSentDate(new Date());


		message.setContent(mp);

		Transport.send(message);

//		return new SuccessResponse(status, returnMsg, LocalDateTime.now());
	}
}
