// Email validation using Rapid Email Validator API
// API: https://rapid-email-verifier.fly.dev/
// Privacy-focused, no data storage, completely free

type EmailValidationResult = {
  email: string;
  validations: {
    syntax: boolean;
    domain_exists: boolean;
    mx_records: boolean;
    mailbox_exists: boolean;
    is_disposable: boolean;
    is_role_based: boolean;
  };
  score: number;
  status: string;
};

/**
 * Validate email address using Rapid Email Validator API
 * Returns true if email is valid, false otherwise
 */
export async function validateEmail(email: string): Promise<{
  valid: boolean;
  reason?: string;
  suggestion?: string;
}> {
  try {
    // Call Rapid Email Validator API
    const response = await fetch(`https://rapid-email-verifier.fly.dev/api/validate?email=${encodeURIComponent(email)}`, {
      method: 'GET',
      headers: {
        'Accept': 'application/json',
      },
    });

    if (!response.ok) {
      console.error(`Email validation API error: ${response.status}`);
      // If API is down, reject the email with error message
      return { 
        valid: false, 
        reason: 'E-Mail-Validierung ist derzeit nicht verfügbar. Bitte überprüfe deine E-Mail-Adresse und versuche es erneut.' 
      };
    }

    const data: EmailValidationResult = await response.json();

    // Check if email is disposable/temporary
    if (data.validations.is_disposable) {
      return {
        valid: false,
        reason: 'Temporäre oder Wegwerf-E-Mail-Adressen sind nicht erlaubt. Bitte verwende eine echte E-Mail-Adresse.',
      };
    }

    // Check if MX records exist (deliverable)
    if (!data.validations.mx_records) {
      return {
        valid: false,
        reason: 'Diese E-Mail-Adresse kann keine E-Mails empfangen. Bitte überprüfe deine E-Mail-Adresse.',
      };
    }

    // Check if domain exists
    if (!data.validations.domain_exists) {
      return {
        valid: false,
        reason: 'Die E-Mail-Domain existiert nicht. Bitte überprüfe deine E-Mail-Adresse.',
      };
    }

    // Check if email syntax is valid
    if (!data.validations.syntax) {
      return {
        valid: false,
        reason: 'Ungültige E-Mail-Adresse. Bitte überprüfe die Schreibweise.',
      };
    }

    // Email is valid
    return { valid: true };

  } catch (error) {
    console.error('Email validation error:', error);
    // If validation fails, reject the email with error message
    return { 
      valid: false, 
      reason: 'E-Mail-Validierung ist derzeit nicht verfügbar. Bitte überprüfe deine E-Mail-Adresse und versuche es erneut.' 
    };
  }
}

/**
 * Batch validate multiple emails
 * @param emails Array of email addresses to validate
 * @returns Array of validation results
 */
export async function validateEmailBatch(emails: string[]): Promise<Map<string, {
  valid: boolean;
  reason?: string;
  suggestion?: string;
}>> {
  const results = new Map<string, { valid: boolean; reason?: string; suggestion?: string }>();

  // Validate up to 100 emails at once (API limit)
  const batchSize = 100;
  for (let i = 0; i < emails.length; i += batchSize) {
    const batch = emails.slice(i, i + batchSize);
    
    // Call each validation in parallel for better performance
    const validations = await Promise.all(
      batch.map(async (email) => {
        const result = await validateEmail(email);
        return { email, result };
      })
    );

    // Store results
    validations.forEach(({ email, result }) => {
      results.set(email, result);
    });
  }

  return results;
}


