package com.codebyte.api.auth.service;

import com.codebyte.api.config.AppProperties;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;

/** SMTP-backed {@link MailService}. In dev this points at MailHog; in tests at GreenMail. */
@Service
public class SmtpMailService implements MailService {

    private final MailSender mailSender;
    private final AppProperties properties;

    public SmtpMailService(MailSender mailSender, AppProperties properties) {
        this.mailSender = mailSender;
        this.properties = properties;
    }

    @Override
    public void sendActivationEmail(String to, String activationToken) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(properties.mail().from());
        message.setTo(to);
        message.setSubject("Activate your account");
        String link =
                properties.activation().baseUrl()
                        + "/api/v1/auth/activate?token="
                        + activationToken;
        message.setText(
                "Welcome!\n\nYour activation token is: "
                        + activationToken
                        + "\n\nOr open: "
                        + link
                        + "\n");
        mailSender.send(message);
    }

    @Override
    public void sendPasswordResetEmail(String to, String resetToken) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(properties.mail().from());
        message.setTo(to);
        message.setSubject("Reset your password");
        String link =
                properties.activation().baseUrl()
                        + "/api/v1/auth/password/reset?token="
                        + resetToken;
        message.setText(
                "A password reset was requested.\n\nYour reset token is: "
                        + resetToken
                        + "\n\nOr open: "
                        + link
                        + "\n\nIf you did not request this, ignore this email.\n");
        mailSender.send(message);
    }
}
