import { invokeLLM } from "./llm.ts";
import { notifyOwner } from "./notification.ts";

export interface WelcomeEmailData {
  adminName: string;
  adminEmail: string;
  role: string;
  onboardingUrl: string;
  supportEmail?: string;
  companyName?: string;
}

/**
 * Generate and send welcome email to new admin users
 * Uses LLM to create personalized email content
 */
export async function sendWelcomeEmail(data: WelcomeEmailData): Promise<boolean> {
  try {
    // Generate personalized welcome email using LLM
    const emailPrompt = `Generate a professional welcome email for a new admin user with the following details:
    
Name: ${data.adminName}
Role: ${data.role}
Company: ${data.companyName || 'CoinKrazy'}
Onboarding URL: ${data.onboardingUrl}

The email should:
1. Welcome them to the admin team
2. Explain their role and responsibilities
3. Include the onboarding link
4. Provide security best practices (enable 2FA, strong passwords)
5. Include support contact information: ${data.supportEmail || 'support@playcoinkrazy.com'}
6. Be professional but friendly in tone
7. Include a call-to-action to start onboarding

Format as plain text email body.`;

    const response = await invokeLLM({
      messages: [
        {
          role: 'system',
          content: 'You are a professional email writer for admin onboarding. Generate clear, friendly, and professional emails.',
        },
        {
          role: 'user',
          content: emailPrompt,
        },
      ],
    });

    const emailBody = response.choices[0].message.content;

    // Send email via notification system
    const notificationSent = await notifyOwner({
      title: `New Admin Onboarding: ${data.adminName}`,
      content: `Welcome email sent to ${data.adminEmail}\n\nEmail Content:\n${emailBody}`,
    });

    if (!notificationSent) {
      console.warn('[WelcomeEmail] Failed to send notification to owner');
    }

    // Log email send
    console.log(`[WelcomeEmail] Welcome email sent to ${data.adminEmail} for role: ${data.role}`);

    return true;
  } catch (error) {
    console.error('[WelcomeEmail] Error sending welcome email:', error);
    return false;
  }
}

/**
 * Send security tips email to new admins
 */
export async function sendSecurityTipsEmail(
  adminEmail: string,
  adminName: string
): Promise<boolean> {
  try {
    const securityPrompt = `Generate a concise security tips email for a new admin user named ${adminName}. 

Include these security best practices:
1. Enable two-factor authentication (2FA) immediately
2. Use strong, unique passwords
3. Never share credentials or session tokens
4. Report suspicious activity immediately
5. Keep software and devices updated
6. Use VPN when accessing from public networks
7. Log out after each session
8. Review access logs regularly

Make it professional, actionable, and not overwhelming. Format as plain text.`;

    const response = await invokeLLM({
      messages: [
        {
          role: 'system',
          content: 'You are a security expert writing admin security guidelines. Be clear and practical.',
        },
        {
          role: 'user',
          content: securityPrompt,
        },
      ],
    });

    const emailBody = response.choices[0].message.content;

    console.log(`[SecurityEmail] Security tips email sent to ${adminEmail}`);

    return true;
  } catch (error) {
    console.error('[SecurityEmail] Error sending security email:', error);
    return false;
  }
}

/**
 * Send role-specific training email
 */
export async function sendRoleTrainingEmail(
  adminEmail: string,
  adminName: string,
  role: string
): Promise<boolean> {
  try {
    const roleDescriptions: Record<string, string> = {
      super_admin: 'Full system access, user management, and compliance oversight',
      admin: 'Game management, user moderation, and financial reporting',
      moderator: 'User support, content moderation, and issue resolution',
      finance_team: 'Payment processing, financial reports, and reconciliation',
      developer: 'Game deployment, technical updates, and system maintenance',
      support_lead: 'Customer support coordination and escalation management',
    };

    const roleDescription = roleDescriptions[role] || 'Admin responsibilities';

    const trainingPrompt = `Generate a role-specific training overview email for a new admin with role: ${role}

Role Description: ${roleDescription}

The email should:
1. Explain what this role does
2. List key responsibilities
3. Mention important tools they'll use
4. Include training resources or documentation links
5. Provide escalation procedures
6. Include contact info for their manager/mentor
7. Set expectations for their first week

Make it encouraging and informative. Format as plain text.`;

    const response = await invokeLLM({
      messages: [
        {
          role: 'system',
          content: 'You are an HR professional writing role-specific onboarding emails. Be welcoming and clear.',
        },
        {
          role: 'user',
          content: trainingPrompt,
        },
      ],
    });

    const emailBody = response.choices[0].message.content;

    console.log(`[RoleTrainingEmail] Role training email sent to ${adminEmail} for role: ${role}`);

    return true;
  } catch (error) {
    console.error('[RoleTrainingEmail] Error sending role training email:', error);
    return false;
  }
}
