#!/usr/bin/env python3
"""
Script para añadir cabeceras CORS a todos los archivos PHP de la API.
- Detecta archivos que ya tienen CORS (no los modifica)
- Añade CORS solo a los que lo necesitan
- Crea backup de cada archivo modificado
"""

import os
import shutil
from datetime import datetime

# ============================================
# CONFIGURACIÓN
# ============================================
API_DIR = '/var/www/html/api'

# Cabeceras CORS a añadir
CORS_BLOCK = """<?php
// =========================================
// CABECERAS CORS (OBLIGATORIO para Cloudflare Tunnel)
// =========================================
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Access-Control-Allow-Credentials: true");
header('Content-Type: application/json');

// Manejar preflight requests (OPTIONS)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}
"""

def ya_tiene_cors(contenido):
    """Verifica si el archivo ya tiene cabeceras CORS."""
    return 'Access-Control-Allow-Origin' in contenido

def añadir_cors(ruta_archivo):
    """Añade cabeceras CORS al archivo PHP si no las tiene."""
    # Leer contenido
    with open(ruta_archivo, 'r', encoding='utf-8') as f:
        contenido = f.read()
    
    # Si ya tiene CORS, no tocar
    if ya_tiene_cors(contenido):
        print(f"  ️  Ya tiene CORS: {os.path.basename(ruta_archivo)}")
        return False
    
    # Crear backup
    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
    backup_path = f"{ruta_archivo}.bak_{timestamp}"
    shutil.copy2(ruta_archivo, backup_path)
    print(f"  ✅ Backup creado: {os.path.basename(backup_path)}")
    
    # Si empieza con <?php, reemplazarlo
    if contenido.strip().startswith('<?php'):
        contenido = contenido.replace('<?php', CORS_BLOCK, 1)
    else:
        # Si no empieza con <?php, añadirlo al principio
        contenido = CORS_BLOCK + contenido
    
    # Guardar cambios
    with open(ruta_archivo, 'w', encoding='utf-8') as f:
        f.write(contenido)
    
    print(f"  ✅ CORS añadido: {os.path.basename(ruta_archivo)}")
    return True

def main():
    print("=" * 70)
    print(" 🚀 SCRIPT: Añadir cabeceras CORS a archivos PHP de la API")
    print("=" * 70)
    print(f"📁 Directorio: {API_DIR}")
    print()
    
    # Verificar que el directorio existe
    if not os.path.exists(API_DIR):
        print(f"❌ ERROR: No existe el directorio {API_DIR}")
        return
    
    # Buscar todos los archivos PHP
    archivos_php = []
    for archivo in os.listdir(API_DIR):
        if archivo.endswith('.php'):
            archivos_php.append(os.path.join(API_DIR, archivo))
    
    if not archivos_php:
        print("❌ No se encontraron archivos PHP en", API_DIR)
        return
    
    print(f"📂 Archivos PHP encontrados: {len(archivos_php)}\n")
    
    modificados = 0
    ya_modificados = 0
    
    for archivo in sorted(archivos_php):
        if añadir_cors(archivo):
            modificados += 1
        else:
            ya_modificados += 1
    
    print("\n" + "=" * 70)
    print(" 📊 RESUMEN")
    print("=" * 70)
    print(f"  ✅ Archivos modificados (CORS añadido): {modificados}")
    print(f"  ℹ️  Archivos ya modificados manualmente: {ya_modificados}")
    print(f"  📁 Total de archivos procesados: {modificados + ya_modificados}")
    print("=" * 70)
    print("\n💡 Recuerda:")
    print("  1. Reinicia Apache: sudo systemctl restart apache2")
    print("  2. Limpia la caché del navegador (Ctrl + Shift + R)")
    print("  3. Prueba el login y la recuperación de contraseña")

if __name__ == '__main__':
    main()
