/**
 * Windsurf Parser - Windsurf邮件解析器
 * 用于解析Windsurf发送的验证码邮件
 */

const BaseParser = require('./base-parser');

class WindsurfParser extends BaseParser {
  constructor() {
    super('Windsurf');
    
    // Windsurf邮件的特征
    this.senderKeywords = ['windsurf', 'codeium', 'exafunction'];
    this.subjectKeywords = ['verify', 'verification', 'code', '验证', 'welcome'];
    
    // 验证码的正则表达式（根据实际邮件调整）
    this.codePatterns = [
      // HTML格式: <h1 class="code_xxx">866172</h1>
      /<h1[^>]*class="code[^"]*"[^>]*>(\d{6})<\/h1>/i,
      // 常见格式
      /6 digit code[^0-9]*(\d{6})/i,
      /verification code[^0-9]*(\d{6})/i,
      /verify.*code:?\s*(\d{6})/i,
      // 纯6位数字（最后尝试）
      /\b(\d{6})\b/
    ];
  }

  /**
   * 判断是否是Windsurf的验证码邮件
   */
  canParse(email) {
    if (!email) return false;

    const from = (email.from || '').toLowerCase();
    const subject = (email.subject || '').toLowerCase();

    // 检查发件人
    const hasSender = this.senderKeywords.some(keyword => 
      from.includes(keyword)
    );

    // 检查主题
    const hasSubject = this.subjectKeywords.some(keyword =>
      subject.includes(keyword)
    );

    return hasSender || hasSubject;
  }

  /**
   * 从邮件中提取验证码
   */
  extractCode(email) {
    if (!email) return null;

    // 优先从HTML提取
    let code = this.extractFromHtml(email.html);
    if (code) return code;

    // 其次从纯文本提取
    code = this.extractFromText(email.text);
    if (code) return code;

    return null;
  }

  /**
   * 从HTML内容提取验证码
   */
  extractFromHtml(html) {
    if (!html) return null;

    // 先尝试直接从HTML提取（保留HTML标签）
    for (const pattern of this.codePatterns) {
      const code = this.extractByRegex(html, pattern);
      if (code && this.validateCode(code)) {
        return code;
      }
    }

    // 如果HTML提取失败，再去除标签后尝试
    const text = this.stripHtml(html);
    return this.extractFromText(text);
  }

  /**
   * 从文本内容提取验证码
   */
  extractFromText(text) {
    if (!text) return null;

    // 尝试所有正则表达式
    for (const pattern of this.codePatterns) {
      const code = this.extractByRegex(text, pattern);
      if (code && this.validateCode(code)) {
        return code;
      }
    }

    return null;
  }

  /**
   * 验证提取的验证码是否合理
   */
  validateCode(code) {
    if (!code) return false;
    
    // Windsurf验证码是6位数字
    if (code.length !== 6) {
      return false;
    }

    // 应该是纯数字
    if (!/^\d{6}$/.test(code)) {
      return false;
    }

    return true;
  }
}

module.exports = WindsurfParser;
