#!/usr/bin/env python3
"""
Email Validator Proxy Server
Resolve CORS issues by proxying requests to mails.so API
"""

from flask import Flask, request, jsonify
from flask_cors import CORS
import requests
import re

app = Flask(__name__)
CORS(app)  # Enable CORS for all routes

API_KEY = "b872fcef-1290-4a84-94a7-a1a50a77d0c9"
BASE_URL = "https://api.mails.so/v1"

def validate_email_format(email):
    """Basic email format validation"""
    pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    return re.match(pattern, email) is not None

@app.route('/api/validate', methods=['GET'])
def validate_single():
    """Validate single email"""
    email = request.args.get('email')

    if not email:
        return jsonify({"error": "Email parameter is required"}), 400

    if not validate_email_format(email):
        return jsonify({
            "data": {
                "email": email,
                "isv_format": False,
                "isv_domain": False,
                "result": "invalid",
                "reason": "invalid_format"
            },
            "error": None
        }), 200

    try:
        url = f"{BASE_URL}/validate"
        headers = {"x-mails-api-key": API_KEY}
        params = {"email": email}

        response = requests.get(url, headers=headers, params=params, timeout=10)
        response.raise_for_status()

        return jsonify(response.json()), response.status_code

    except requests.RequestException as e:
        return jsonify({
            "error": str(e),
            "data": {
                "email": email,
                "isv_format": validate_email_format(email),
                "result": "error"
            }
        }), 500

@app.route('/api/batch', methods=['POST'])
def validate_batch():
    """Validate multiple emails"""
    data = request.get_json()

    if not data or 'emails' not in data:
        return jsonify({"error": "Emails array is required"}), 400

    emails = data['emails']

    if not isinstance(emails, list):
        return jsonify({"error": "Emails must be an array"}), 400

    if len(emails) == 0:
        return jsonify({"error": "Emails array is empty"}), 400

    if len(emails) > 100:
        return jsonify({"error": "Maximum 100 emails per batch"}), 400

    try:
        url = f"{BASE_URL}/batch"
        headers = {
            "x-mails-api-key": API_KEY,
            "Content-Type": "application/json"
        }
        payload = {"emails": emails}

        response = requests.post(url, headers=headers, json=payload, timeout=30)
        response.raise_for_status()

        return jsonify(response.json()), response.status_code

    except requests.RequestException as e:
        # Fallback: return basic validation
        results = []
        for email in emails:
            results.append({
                "email": email,
                "isv_format": validate_email_format(email),
                "result": "error",
                "reason": str(e)
            })

        return jsonify({
            "error": str(e),
            "data": results
        }), 500

@app.route('/api/health', methods=['GET'])
def health_check():
    """Health check endpoint"""
    try:
        # Test API connection
        url = f"{BASE_URL}/validate"
        headers = {"x-mails-api-key": API_KEY}
        params = {"email": "test@example.com"}

        response = requests.get(url, headers=headers, params=params, timeout=5)
        api_status = "online" if response.status_code == 200 else "degraded"

    except:
        api_status = "offline"

    return jsonify({
        "status": "ok",
        "proxy": "online",
        "api": api_status,
        "version": "1.0.0"
    }), 200

@app.route('/')
def index():
    """Root endpoint"""
    return jsonify({
        "service": "Email Validator Proxy",
        "version": "1.0.0",
        "endpoints": {
            "validate": "/api/validate?email=<email>",
            "batch": "/api/batch (POST with {emails: []})",
            "health": "/api/health"
        }
    })

if __name__ == '__main__':
    print("\n" + "="*60)
    print("📧 Email Validator Proxy Server")
    print("="*60)
    print("\n🚀 Starting server on http://localhost:5005")
    print("\n📝 Available endpoints:")
    print("   • GET  /api/validate?email=<email>")
    print("   • POST /api/batch")
    print("   • GET  /api/health")
    print("\n💡 Use this proxy to avoid CORS issues in web UI")
    print("\n🌐 Web UI: http://localhost:8000/email-validator-ui.html")
    print("="*60 + "\n")

    app.run(host='0.0.0.0', port=5005, debug=True)
