package kz.konturai.parser.service;

import org.springframework.core.io.ByteArrayResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Service
public class EmailService {

    private final JavaMailSender mailSender;

    public EmailService(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }

    /**
     * Отправляет PDF отчет на указанный email адрес
     * 
     * @param recipientEmail email получателя
     * @param reportTitle    название отчета
     * @param authorName     имя автора
     * @param companyName    название компании
     * @param pdfBytes       содержимое PDF файла
     * @param filename       имя файла
     */
    public void sendReportByEmail(String recipientEmail, String reportTitle,
            String authorName, String companyName,
            byte[] pdfBytes, String filename) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");

            // Настройка получателя и отправителя
            helper.setTo(recipientEmail);
            helper.setFrom("noreply@konturai.kz"); // Можно настроить в конфигурации

            // Тема письма
            String subject = String.format("Аналитический отчет: %s",
                    reportTitle != null ? reportTitle : "Отчет");
            helper.setSubject(subject);

            // Текст письма
            String emailBody = buildEmailBody(reportTitle, authorName, companyName);
            helper.setText(emailBody, true); // true означает HTML формат

            // Прикрепляем PDF файл
            ByteArrayResource pdfResource = new ByteArrayResource(pdfBytes) {
                @Override
                public String getFilename() {
                    return filename;
                }
            };
            helper.addAttachment(filename, pdfResource, "application/pdf");

            // Отправляем письмо
            mailSender.send(message);

            System.out.println("Email с отчетом успешно отправлен на: " + recipientEmail);

        } catch (MessagingException e) {
            System.err.println("Ошибка при отправке email: " + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * Создает HTML содержимое письма
     */
    private String buildEmailBody(String reportTitle, String authorName, String companyName) {
        String currentDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"));

        return String.format(
                """
                        <html>
                        <body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
                            <div style="max-width: 600px; margin: 0 auto; padding: 20px;">
                                <h2 style="color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px;">
                                    Аналитический отчет готов
                                </h2>

                                <p>Здравствуйте!</p>

                                <p>Ваш аналитический отчет успешно сгенерирован и готов к просмотру.</p>

                                <div style="background-color: #f8f9fa; padding: 15px; border-left: 4px solid #3498db; margin: 20px 0;">
                                    <h3 style="margin-top: 0; color: #2c3e50;">Детали отчета:</h3>
                                    <p><strong>Название:</strong> %s</p>
                                    <p><strong>Автор:</strong> %s</p>
                                    <p><strong>Компания:</strong> %s</p>
                                    <p><strong>Дата создания:</strong> %s</p>
                                </div>

                                <p>PDF файл с отчетом прикреплен к данному письму. Вы можете скачать его и сохранить для дальнейшего использования.</p>

                                <p>Если у вас возникли вопросы или нужна дополнительная информация, пожалуйста, свяжитесь с нами.</p>

                                <hr style="margin: 30px 0; border: none; border-top: 1px solid #eee;">

                                <p style="font-size: 12px; color: #666;">
                                    С уважением,<br>
                                    Команда Konturai Analytics<br>
                                    <em>Это письмо отправлено автоматически, пожалуйста, не отвечайте на него.</em>
                                </p>
                            </div>
                        </body>
                        </html>
                        """,
                reportTitle != null ? reportTitle : "Не указано",
                authorName != null ? authorName : "Не указан",
                companyName != null ? companyName : "Не указана",
                currentDate);
    }
}
