package com.corewing.app.util;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * 邮件发送测试类
 *
 * 使用说明：
 * 1. 确保 application.properties 中已正确配置邮件服务器信息
 * 2. 将下面测试方法中的收件人邮箱改为你自己的邮箱
 * 3. 运行测试前确保网络连接正常
 */
@SpringBootTest
public class EmailUtilTest {

    @Autowired
    private EmailUtil emailUtil;

    /**
     * 测试发送简单文本邮件
     */
    @Test
    public void testSendSimpleMail() {
        String to = "zmissu@163.com";  // 修改为实际收件人邮箱
        String subject = "【CoreWing】简单文本邮件测试";
        String content = "这是一封测试邮件，如果您收到这封邮件，说明邮件发送功能正常。\n\n发送时间：" +
                        java.time.LocalDateTime.now();

        boolean success = emailUtil.sendSimpleMail(to, subject, content);

        if (success) {
            System.out.println("✅ 简单文本邮件发送成功！请检查收件箱: " + to);
        } else {
            System.err.println("❌ 简单文本邮件发送失败！请检查邮件配置和网络连接。");
        }
    }

    /**
     * 测试发送HTML邮件
     */
    @Test
    public void testSendHtmlMail() {
        String to = "test@example.com";  // 修改为实际收件人邮箱
        String subject = "【CoreWing】HTML邮件测试";
        String content = "<html>" +
                "<body style='font-family: Arial, sans-serif;'>" +
                "<div style='background-color: #f0f0f0; padding: 20px;'>" +
                "<h2 style='color: #333;'>CoreWing 系统通知</h2>" +
                "<p>这是一封 <strong>HTML格式</strong> 的测试邮件。</p>" +
                "<p>如果您能看到这封邮件的样式，说明HTML邮件发送功能正常。</p>" +
                "<hr>" +
                "<p style='color: #666; font-size: 12px;'>发送时间：" +
                java.time.LocalDateTime.now() + "</p>" +
                "</div>" +
                "</body>" +
                "</html>";

        boolean success = emailUtil.sendHtmlMail(to, subject, content);

        if (success) {
            System.out.println("✅ HTML邮件发送成功！请检查收件箱: " + to);
        } else {
            System.err.println("❌ HTML邮件发送失败！请检查邮件配置和网络连接。");
        }
    }

    /**
     * 测试发送验证码邮件
     */
    @Test
    public void testSendVerifyCode() {
        String to = "test@example.com";  // 修改为实际收件人邮箱
        String code = "123456";  // 测试验证码

        boolean success = emailUtil.sendVerifyCode(to, code);

        if (success) {
            System.out.println("✅ 验证码邮件发送成功！");
            System.out.println("   收件人: " + to);
            System.out.println("   验证码: " + code);
            System.out.println("   请检查收件箱（可能在垃圾邮件中）");
        } else {
            System.err.println("❌ 验证码邮件发送失败！");
            System.err.println("   可能的原因：");
            System.err.println("   1. 邮件服务器配置错误");
            System.err.println("   2. 邮箱授权码不正确");
            System.err.println("   3. 网络连接问题");
            System.err.println("   4. 邮件服务器防火墙限制");
        }
    }

    /**
     * 测试发送多个验证码邮件（模拟实际场景）
     */
    @Test
    public void testSendMultipleVerifyCode() {
        String[] emails = {
            "test1@example.com",  // 修改为实际收件人邮箱
            "test2@example.com"   // 可以添加更多测试邮箱
        };

        System.out.println("🚀 开始批量发送验证码邮件测试...\n");

        int successCount = 0;
        int failCount = 0;

        for (int i = 0; i < emails.length; i++) {
            String email = emails[i];
            String code = generateRandomCode();

            System.out.println("📧 正在发送第 " + (i + 1) + " 封邮件...");
            System.out.println("   收件人: " + email);
            System.out.println("   验证码: " + code);

            boolean success = emailUtil.sendVerifyCode(email, code);

            if (success) {
                System.out.println("   ✅ 发送成功\n");
                successCount++;
            } else {
                System.err.println("   ❌ 发送失败\n");
                failCount++;
            }

            // 避免发送过快被限流，间隔1秒
            if (i < emails.length - 1) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        System.out.println("📊 测试完成统计：");
        System.out.println("   总计: " + emails.length + " 封");
        System.out.println("   成功: " + successCount + " 封");
        System.out.println("   失败: " + failCount + " 封");
        System.out.println("   成功率: " + (successCount * 100 / emails.length) + "%");
    }

    /**
     * 生成随机6位验证码
     */
    private String generateRandomCode() {
        return String.format("%06d", (int)(Math.random() * 1000000));
    }
}
