import nodemailer from "nodemailer";
import { generateCertificate } from "./certificateGenerator.ts";

export interface CertificationEmailOptions {
  adminName: string;
  adminEmail: string;
  certificationTitle: string;
  certificationLevel: string;
  certificationNumber: string;
  issueDate: Date;
  expirationDate: Date;
  verificationUrl: string;
  certificatePdfBuffer?: Buffer;
}

/**
 * Email transporter configuration
 * In production, use environment variables for SMTP settings
 */
const transporter = nodemailer.createTransport({
  host: process.env.SMTP_HOST || "smtp.gmail.com",
  port: parseInt(process.env.SMTP_PORT || "587"),
  secure: process.env.SMTP_SECURE === "true",
  auth: {
    user: process.env.SMTP_USER,
    pass: process.env.SMTP_PASSWORD,
  },
});

/**
 * Send certification email with PDF attachment
 */
export async function sendCertificationEmail(
  options: CertificationEmailOptions
): Promise<{ success: boolean; messageId?: string; error?: string }> {
  try {
    // Generate certificate PDF if not provided
    let pdfBuffer = options.certificatePdfBuffer;
    if (!pdfBuffer) {
      pdfBuffer = await generateCertificate({
        adminName: options.adminName,
        certificationName: options.certificationTitle,
        certificationNumber: options.certificationNumber,
        issueDate: options.issueDate,
        expirationDate: options.expirationDate,
        organizationName: "CoinKrazy.com",
        verificationUrl: options.verificationUrl,
      });
    }

    // Create email HTML
    const emailHtml = createCertificationEmailHtml({
      adminName: options.adminName,
      certificationTitle: options.certificationTitle,
      certificationLevel: options.certificationLevel,
      certificationNumber: options.certificationNumber,
      issueDate: options.issueDate,
      expirationDate: options.expirationDate,
      verificationUrl: options.verificationUrl,
    });

    // Send email
    const info = await transporter.sendMail({
      from: process.env.SMTP_FROM || "noreply@playplaycoinkrazy.com",
      to: options.adminEmail,
      subject: `🎓 Congratulations! Your ${options.certificationTitle} Certificate`,
      html: emailHtml,
      attachments: [
        {
          filename: `certificate-${options.adminName.replace(/\s+/g, "-")}-${Date.now()}.pdf`,
          content: pdfBuffer,
          contentType: "application/pdf",
        },
      ],
    });

    console.log("Certification email sent:", info.messageId);
    return { success: true, messageId: info.messageId };
  } catch (error) {
    console.error("Failed to send certification email:", error);
    return {
      success: false,
      error: error instanceof Error ? error.message : "Unknown error",
    };
  }
}

/**
 * Send certification expiration reminder email
 */
export async function sendCertificationExpirationReminder(
  adminName: string,
  adminEmail: string,
  certificationTitle: string,
  expirationDate: Date,
  verificationUrl: string
): Promise<{ success: boolean; messageId?: string; error?: string }> {
  try {
    const daysUntilExpiration = Math.ceil(
      (expirationDate.getTime() - Date.now()) / (1000 * 60 * 60 * 24)
    );

    const emailHtml = `
      <!DOCTYPE html>
      <html>
        <head>
          <style>
            body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }
            .container { max-width: 600px; margin: 0 auto; padding: 20px; }
            .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; border-radius: 8px 8px 0 0; text-align: center; }
            .content { background: #f8f9fa; padding: 30px; border-radius: 0 0 8px 8px; }
            .button { display: inline-block; background: #667eea; color: white; padding: 12px 24px; border-radius: 6px; text-decoration: none; margin-top: 20px; }
            .footer { text-align: center; color: #666; font-size: 12px; margin-top: 20px; }
          </style>
        </head>
        <body>
          <div class="container">
            <div class="header">
              <h1>⏰ Certification Expiration Reminder</h1>
            </div>
            <div class="content">
              <p>Hi ${adminName},</p>
              <p>Your <strong>${certificationTitle}</strong> certification will expire in <strong>${daysUntilExpiration} days</strong> on ${expirationDate.toLocaleDateString()}.</p>
              <p>To renew your certification or verify its current status, please visit the verification page:</p>
              <a href="${verificationUrl}" class="button">View Certificate</a>
              <p style="margin-top: 30px; color: #666;">If you have any questions about your certification, please contact our support team.</p>
            </div>
            <div class="footer">
              <p>© 2026 CoinKrazy.com. All rights reserved.</p>
            </div>
          </div>
        </body>
      </html>
    `;

    const info = await transporter.sendMail({
      from: process.env.SMTP_FROM || "noreply@playplaycoinkrazy.com",
      to: adminEmail,
      subject: `⏰ Reminder: Your ${certificationTitle} Certificate Expires in ${daysUntilExpiration} Days`,
      html: emailHtml,
    });

    console.log("Expiration reminder email sent:", info.messageId);
    return { success: true, messageId: info.messageId };
  } catch (error) {
    console.error("Failed to send expiration reminder email:", error);
    return {
      success: false,
      error: error instanceof Error ? error.message : "Unknown error",
    };
  }
}

/**
 * Create HTML email template for certification
 */
function createCertificationEmailHtml(options: {
  adminName: string;
  certificationTitle: string;
  certificationLevel: string;
  certificationNumber: string;
  issueDate: Date;
  expirationDate: Date;
  verificationUrl: string;
}): string {
  return `
    <!DOCTYPE html>
    <html>
      <head>
        <style>
          body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: #333; }
          .container { max-width: 600px; margin: 0 auto; padding: 20px; }
          .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 40px; border-radius: 8px 8px 0 0; text-align: center; }
          .header h1 { margin: 0; font-size: 28px; }
          .header p { margin: 10px 0 0 0; opacity: 0.9; }
          .content { background: #f8f9fa; padding: 40px; border-radius: 0 0 8px 8px; }
          .certificate-details { background: white; padding: 20px; border-radius: 6px; margin: 20px 0; border-left: 4px solid #667eea; }
          .detail-row { display: flex; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid #eee; }
          .detail-row:last-child { border-bottom: none; }
          .detail-label { font-weight: 600; color: #666; }
          .detail-value { color: #333; }
          .button { display: inline-block; background: #667eea; color: white; padding: 12px 24px; border-radius: 6px; text-decoration: none; margin-top: 20px; }
          .button:hover { background: #5568d3; }
          .footer { text-align: center; color: #666; font-size: 12px; margin-top: 30px; }
          .badge { display: inline-block; background: #e8f0ff; color: #667eea; padding: 6px 12px; border-radius: 20px; font-size: 12px; font-weight: 600; margin-top: 10px; }
        </style>
      </head>
      <body>
        <div class="container">
          <div class="header">
            <h1>🎓 Congratulations!</h1>
            <p>Your Professional Certification Has Been Issued</p>
          </div>
          <div class="content">
            <p>Hi ${options.adminName},</p>
            <p>We're pleased to inform you that your <strong>${options.certificationTitle}</strong> certification has been successfully issued!</p>
            
            <div class="certificate-details">
              <div class="detail-row">
                <span class="detail-label">Certification Title</span>
                <span class="detail-value">${options.certificationTitle}</span>
              </div>
              <div class="detail-row">
                <span class="detail-label">Level</span>
                <span class="detail-value">
                  <span class="badge">${options.certificationLevel.toUpperCase()}</span>
                </span>
              </div>
              <div class="detail-row">
                <span class="detail-label">Certificate Number</span>
                <span class="detail-value"><code>${options.certificationNumber}</code></span>
              </div>
              <div class="detail-row">
                <span class="detail-label">Issue Date</span>
                <span class="detail-value">${options.issueDate.toLocaleDateString("en-US", {
                  year: "numeric",
                  month: "long",
                  day: "numeric",
                })}</span>
              </div>
              <div class="detail-row">
                <span class="detail-label">Expiration Date</span>
                <span class="detail-value">${options.expirationDate.toLocaleDateString("en-US", {
                  year: "numeric",
                  month: "long",
                  day: "numeric",
                })}</span>
              </div>
            </div>

            <p>Your certificate is attached to this email as a PDF file. You can also verify and download your certificate at any time using the link below:</p>
            
            <a href="${options.verificationUrl}" class="button">Verify Certificate</a>

            <p style="margin-top: 30px; color: #666; font-size: 14px;">
              <strong>Next Steps:</strong>
              <ul>
                <li>Download and save your certificate PDF</li>
                <li>Add your certification to your LinkedIn profile</li>
                <li>Share your achievement with your network</li>
                <li>Continue learning with advanced modules</li>
              </ul>
            </p>

            <p style="margin-top: 30px; color: #666;">
              If you have any questions about your certification or need assistance, please don't hesitate to contact our support team.
            </p>
          </div>
          <div class="footer">
            <p>© 2026 CoinKrazy.com. All rights reserved.</p>
            <p>This is an automated message. Please do not reply to this email.</p>
          </div>
        </div>
      </body>
    </html>
  `;
}

/**
 * Test email configuration
 */
export async function testEmailConfiguration(): Promise<boolean> {
  try {
    await transporter.verify();
    console.log("Email configuration verified successfully");
    return true;
  } catch (error) {
    console.error("Email configuration verification failed:", error);
    return false;
  }
}
