#!/usr/bin/env python3
"""
Script de prueba para verificar que el webhook responde correctamente 
a las peticiones de verificación de Facebook/Meta.
"""

import requests
import sys

def test_webhook_verification(base_url, verify_token):
    """
    Prueba la verificación del webhook simulando la petición que hace Facebook.
    """
    print(f"🧪 Probando verificación webhook en: {base_url}")
    print(f"🔑 Usando token: {verify_token}")
    
    # Parámetros que envía Facebook para verificar el webhook
    params = {
        'hub.mode': 'subscribe',
        'hub.verify_token': verify_token,
        'hub.challenge': 'test_challenge_123456'
    }
    
    try:
        # Probar endpoint raíz (/)
        print("\n1️⃣ Probando endpoint raíz (/)...")
        response = requests.get(f"{base_url}/", params=params, timeout=10)
        
        if response.status_code == 200 and response.text == params['hub.challenge']:
            print("✅ Endpoint raíz: Verificación exitosa")
        else:
            print(f"❌ Endpoint raíz: Error - Status: {response.status_code}, Respuesta: {response.text}")
        
        # Probar endpoint /webhook
        print("\n2️⃣ Probando endpoint /webhook...")
        response = requests.get(f"{base_url}/webhook", params=params, timeout=10)
        
        if response.status_code == 200 and response.text == params['hub.challenge']:
            print("✅ Endpoint /webhook: Verificación exitosa")
        else:
            print(f"❌ Endpoint /webhook: Error - Status: {response.status_code}, Respuesta: {response.text}")
        
        # Probar con token incorrecto
        print("\n3️⃣ Probando con token incorrecto...")
        wrong_params = params.copy()
        wrong_params['hub.verify_token'] = 'token_incorrecto'
        
        response = requests.get(f"{base_url}/", params=wrong_params, timeout=10)
        
        if response.status_code == 403:
            print("✅ Token incorrecto: Correctamente rechazado")
        else:
            print(f"❌ Token incorrecto: Error - Status: {response.status_code}, Respuesta: {response.text}")
            
    except requests.exceptions.RequestException as e:
        print(f"❌ Error de conexión: {e}")
        return False
    
    return True

def test_status_endpoint(base_url):
    """
    Prueba el endpoint de status para verificar que el servidor está funcionando.
    """
    print(f"\n🏥 Probando endpoint de status...")
    
    try:
        response = requests.get(f"{base_url}/status", timeout=10)
        
        if response.status_code == 200:
            data = response.json()
            print("✅ Endpoint de status: OK")
            print(f"   📊 Status: {data.get('status')}")
            print(f"   🔗 Webhook URL: {data.get('webhook_url')}")
            print(f"   📡 WS Endpoint: {data.get('ws_endpoint')}")
            print(f"   📋 Cola: {data.get('queue_size')} elementos")
        else:
            print(f"❌ Endpoint de status: Error - Status: {response.status_code}")
            
    except requests.exceptions.RequestException as e:
        print(f"❌ Error de conexión en status: {e}")

if __name__ == "__main__":
    # Configuración por defecto (puedes cambiar estos valores)
    BASE_URL = "https://oficina.itego.com.ar:5000"
    VERIFY_TOKEN = "It3g0_developer"
    
    # Permitir pasar URL y token como argumentos
    if len(sys.argv) >= 2:
        BASE_URL = sys.argv[1]
    if len(sys.argv) >= 3:
        VERIFY_TOKEN = sys.argv[2]
    
    print("🚀 Iniciando pruebas del webhook...")
    print(f"📍 URL base: {BASE_URL}")
    print(f"🔑 Token de verificación: {VERIFY_TOKEN}")
    
    # Probar status primero
    test_status_endpoint(BASE_URL)
    
    # Probar verificación
    test_webhook_verification(BASE_URL, VERIFY_TOKEN)
    
    print("\n✨ Pruebas completadas.")