package com.emix.dubai.business.service.common;

import com.emix.core.utils.TemplateContentProcessor;
import com.emix.dubai.business.entity.system.User;
import com.emix.dubai.business.pojo.ApplicationProperties;
import org.apache.commons.lang3.Validate;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;

import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author niko
 */
public class SendResetPasswordNotificationTask implements Runnable {

    private JavaMailSender javaMailSender;
    private User user;
    private ApplicationProperties properties;

    SendResetPasswordNotificationTask(JavaMailSender javaMailSender, User user, ApplicationProperties properties) {
        this.javaMailSender = javaMailSender;
        this.user = user;
        this.properties = properties;
    }

    @Override
    public void run() {
        javaMailSender.send(new MimeMessagePreparator() {
            @Override
            public void prepare(MimeMessage mimeMessage) throws Exception {
                Validate.notEmpty(user.getEmail());
                MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
                messageHelper.setTo(user.getEmail());
                messageHelper.setSentDate(new Date());
                messageHelper.setSubject("Please reset your password");
                Map<String, Object> root = new HashMap<String, Object>();
                root.put("properties", properties);
                root.put("user", user);
                messageHelper.setText(TemplateContentProcessor.processTemplateWithFile("reset-password-notification.ftl", root), true);
            }
        });

    }
}