import requests
import re
import datetime
from typing import Optional
from .email_tab_interface import EmailTabInterface

class TempMailPlusTab(EmailTabInterface):
    """Implementation of EmailTabInterface for tempmail.plus"""
    
    def __init__(self, email: str, epin: str):
        """Initialize TempMailPlusTab
        
        Args:
            email: The email address to check
            epin: The epin token for authentication
        """
        self.email = email
        self.epin = epin
        self.base_url = "https://tempmail.plus/api"
        self.headers = {
            'accept': 'application/json',
            'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6',
            'cache-control': 'no-cache',
            'pragma': 'no-cache',
            'referer': 'https://tempmail.plus/zh/',
            'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
            'sec-ch-ua-mobile': '?0',
            'sec-ch-ua-platform': '"macOS"',
            'sec-fetch-dest': 'empty',
            'sec-fetch-mode': 'cors',
            'sec-fetch-site': 'same-origin',
            'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36',
            'x-requested-with': 'XMLHttpRequest'
        }
        self.cookies = {'email': email}
        self._cached_mail_id = None  # 缓存mail_id
        self._cached_verification_code = None  # 缓存验证码
        
    def refresh_inbox(self) -> None:
        """Refresh the email inbox"""
        pass
            
    def check_for_cursor_email(self) -> bool:
        """Check if there is a new email and immediately retrieve verification code
        
        Returns:
            bool: True if new email found and verification code retrieved, False otherwise
        """
        try:
            params = {
                'email': self.email,
                'epin': self.epin
            }
            response = requests.get(
                f"{self.base_url}/mails",
                params=params,
                headers=self.headers,
                cookies=self.cookies
            )
            response.raise_for_status()
            
            data = response.json()
            if data.get('result') and data.get('mail_list'):
                # 检查邮件列表中的第一个邮件是否为新邮件
                if data['mail_list'][0].get('is_new') == True:
                    self._cached_mail_id = data['mail_list'][0].get('mail_id')  # 缓存mail_id
                    
                    # 立即获取验证码
                    verification_code = self._extract_verification_code()
                    if verification_code:
                        self._cached_verification_code = verification_code
                        return True
            return False
        except Exception as e:
            print(f"检查新邮件失败: {str(e)}")
            return False
    
    def _extract_verification_code(self) -> str:
        """Extract verification code from email content
        
        Returns:
            str: The verification code if found, empty string otherwise
        """
        try:
            if not self._cached_mail_id:
                return ""
                
            params = {
                'email': self.email,
                'epin': self.epin
            }
            response = requests.get(
                f"{self.base_url}/mails/{self._cached_mail_id}",
                params=params,
                headers=self.headers,
                cookies=self.cookies
            )
            response.raise_for_status()
            
            data = response.json()
            if not data.get('result'):
                return ""
                
            # 验证发件人邮箱是否包含cursor字符串
            from_mail = data.get('from_mail', '')
            if 'cursor' not in from_mail.lower():
                return ""
                
            # Extract verification code from text content using regex
            text = data.get('text', '')
            match = re.search(r'\n\n(\d{6})\n\n', text)
            if match:
                return match.group(1)
                
            return ""
        except Exception as e:
            print(f"提取验证码失败: {str(e)}")
            return ""
            
    def get_verification_code(self) -> str:
        """Get the verification code from cache
        
        Returns:
            str: The cached verification code if available, empty string otherwise
        """
        return self._cached_verification_code or ""

if __name__ == "__main__":
    import os
    import time
    import sys
    
    from config import get_config
    
    config = get_config()
    
    try:
        email = config.get('TempMailPlus', 'email')
        epin = config.get('TempMailPlus', 'epin')
        
        print(f"配置的邮箱: {email}")
        
        # 初始化TempMailPlusTab
        mail_tab = TempMailPlusTab(email, epin)
        
        # 检查是否有Cursor的邮件
        print("正在检查Cursor验证邮件...")
        if mail_tab.check_for_cursor_email():
            print("找到Cursor验证邮件")
            
            # 获取验证码
            verification_code = mail_tab.get_verification_code()
            if verification_code:
                print(f"获取到的验证码: {verification_code}")
            else:
                print("未能获取到验证码")
        else:
            print("未找到Cursor验证邮件")
            
    except configparser.Error as e:
        print(f"读取配置文件错误: {str(e)}")
    except Exception as e:
        print(f"发生错误: {str(e)}") 