package com.hepl.tunefortwo.service.impl;

import java.util.Properties;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import com.hepl.tunefortwo.service.MailService;

import jakarta.mail.Folder;
import jakarta.mail.Message;
import jakarta.mail.MessagingException;
import jakarta.mail.Session;
import jakarta.mail.Store;
import jakarta.mail.internet.MimeMessage;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Service
@Slf4j
public class MailServiceImpl implements MailService {
 
	public static String FRONTEND_BASE_URL;
    public static String BACKEND_BASE_URL;
	
    @Value("${baseUrl.frontend}")
    public void setFrontendBaseUrl(String frontendBaseUrl) {
        FRONTEND_BASE_URL = frontendBaseUrl;
    }
 
    @Value("${baseUrl.backend}")
    public void setBackendBaseUrl(String backendBaseUrl) {
        BACKEND_BASE_URL = backendBaseUrl;
    }
    
    @Value("${adminMail.id}")
    public String adminFromMail;
    
    private final JavaMailSender javaMailSender;
 
    
    @Value("${spring.imap.host}")
    public String imapHost; // = "imap.hostinger.com";
    
    @Value("${spring.imap.port}")
    public int imapPort;  //= 993;
    
    @Value("${spring.imap.username}")
    public String imapUsername; // = "martinkartenjer@tunefor2.com";
    
    @Value("${spring.imap.password}")
    public String imapPassword; // = "hiwqyj-xysfox-3guHzy";
 
 
    public MailServiceImpl(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }
 
    @Override
    public void sendMailByTemplate(String content, String recepient, String subject) throws MessagingException {
        log.info("Sending mail ... {}", recepient);
        final MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        final MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8"); // true = multipart
        message.setSubject(subject);
    	message.setFrom(adminFromMail);
 
        if(subject=="Order Confirmed") {
        	message.setFrom(adminFromMail);
        }
        if(subject=="Order Delivery Email") {
        	 message.setFrom(adminFromMail);
        }
        
       //message.setFrom("noreply@hepl.com");
 
        message.setTo(recepient);
 
        message.setText(content, true); // true = isHtml
 
        // Add the inline image, referenced from the HTML code as
        // "cid:${imageResourceName}"
//        message.addInline("logo", new ClassPathResource("static/images/logo.png"), "image/png");
//        message.addInline("header", new ClassPathResource("static/images/logo-name.png"), "image/png");
//        message.addInline("background", new ClassPathResource("static/images/abstract-background.jpg"), "image/png");
 
        // Send mail
        javaMailSender.send(mimeMessage);
        
        saveToSentFolder(mimeMessage, recepient, subject, content);
 
    }
    
    public void saveToSentFolder(MimeMessage mimeMessage, String recipient, String subject, String content) throws MessagingException {
        try {
            Properties properties = new Properties();
            properties.put("mail.store.protocol", "imap");
            properties.put("mail.imap.host", imapHost);
            properties.put("mail.imap.port", imapPort);
            properties.put("mail.imap.ssl.enable", "true");
 
            Session emailSession = Session.getDefaultInstance(properties);
            Store store = emailSession.getStore("imap");
            store.connect(imapHost, imapUsername, imapPassword);
 
            // Use the correct folder name "INBOX.Sent"
            Folder sentFolder = store.getFolder("INBOX.Sent");
            if (!sentFolder.exists()) {
                throw new MessagingException("Sent folder not found on the server.");
            }
 
            sentFolder.open(Folder.READ_WRITE);
 
            MimeMessage mimeMessageToSave = new MimeMessage(emailSession);
            mimeMessageToSave.setFrom(imapUsername);
            mimeMessageToSave.setRecipients(Message.RecipientType.TO, recipient);
            mimeMessageToSave.setSubject(subject);
            mimeMessageToSave.setContent(content, "text/html");
 
            sentFolder.appendMessages(new Message[]{mimeMessageToSave});
 
            sentFolder.close(false);
            store.close();
        } catch (Exception e) {
            log.error("Failed to save the email to the Sent folder", e);
        }
    }
 
 
 
 
}
