#!/usr/bin/env python3
"""
Verificar qué extensiones del Excel ya existen y cuáles faltan
"""
import csv
import subprocess

def get_existing_pjsip_endpoints():
    """Obtener endpoints PJSIP existentes"""
    result = subprocess.run(['asterisk', '-rx', 'pjsip show endpoints'], 
                          capture_output=True, text=True)
    
    endpoints = set()
    for line in result.stdout.split('\n'):
        if 'Endpoint:' in line:
            parts = line.split()
            if len(parts) > 1:
                endpoint = parts[1].split('/')[0]
                endpoints.add(endpoint)
    
    return endpoints

def get_existing_agents():
    """Obtener agentes existentes en BD"""
    # Use command line mysql to avoid SSL issues
    result = subprocess.run([
        'mysql', '-uroot', '-pLlam@d@t@2024', 
        '-D', 'asterisk', '-e', 'SELECT usuario FROM agentes',
        '-B', '-N'
    ], capture_output=True, text=True)
    
    agents = set()
    if result.returncode == 0:
        for line in result.stdout.strip().split('\n'):
            if line:
                agents.add(line.strip())
    
    return agents

def check_csv_extensions(csv_file):
    """Analizar extensiones del CSV"""
    with open(csv_file, 'r', encoding='iso-8859-1') as f:
        reader = csv.DictReader(f)
        
        csv_extensions = []
        for row in reader:
            csv_extensions.append({
                'extension': row['EXTENSION'],
                'tipo': row['TIPO'],
                'nombre': row['NOMBRE'],
                'telefono': row['TELEFONO DE CONEXIÓN']
            })
    
    return csv_extensions

def main():
    print("=== VERIFICACIÓN DE EXTENSIONES ===\n")
    
    # Obtener datos actuales
    pjsip_endpoints = get_existing_pjsip_endpoints()
    db_agents = get_existing_agents()
    csv_extensions = check_csv_extensions('/var/www/html/docs/extensiones_data.csv')
    
    print(f"Endpoints PJSIP existentes: {len(pjsip_endpoints)}")
    print(f"Agentes en BD: {len(db_agents)}")
    print(f"Extensiones en CSV: {len(csv_extensions)}")
    print("")
    
    # Analizar por tipo
    tipos = {}
    for ext in csv_extensions:
        tipo = ext['tipo']
        if tipo not in tipos:
            tipos[tipo] = {'total': 0, 'existe_pjsip': 0, 'existe_bd': 0, 'faltantes': []}
        
        tipos[tipo]['total'] += 1
        
        # Verificar si existe
        ext_num = ext['extension']
        existe = False
        
        # Para coordinadores, verificar formato dslpa/dslpb
        if tipo == 'COORDINADOR':
            if f'dslpa{ext_num}' in pjsip_endpoints or f'dslpb{ext_num}' in pjsip_endpoints:
                tipos[tipo]['existe_pjsip'] += 1
                existe = True
        else:
            if ext_num in pjsip_endpoints:
                tipos[tipo]['existe_pjsip'] += 1
                existe = True
        
        # Verificar en BD para agentes
        if tipo in ['TAROT', 'INFO'] and ext_num in db_agents:
            tipos[tipo]['existe_bd'] += 1
        elif tipo in ['TAROT', 'INFO'] and ext_num not in db_agents:
            tipos[tipo]['faltantes'].append(ext)
        
        if not existe and tipo not in ['TAROT', 'INFO']:
            tipos[tipo]['faltantes'].append(ext)
    
    # Mostrar resumen
    print("=== RESUMEN POR TIPO ===")
    for tipo, stats in tipos.items():
        print(f"\n{tipo}:")
        print(f"  Total en CSV: {stats['total']}")
        print(f"  Existen en PJSIP: {stats['existe_pjsip']}")
        if tipo in ['TAROT', 'INFO']:
            print(f"  Existen en BD: {stats['existe_bd']}")
        print(f"  Faltan crear: {len(stats['faltantes'])}")
        
        if stats['faltantes'] and len(stats['faltantes']) <= 10:
            print("  Faltantes:")
            for ext in stats['faltantes']:
                print(f"    - {ext['extension']}: {ext['nombre']}")
    
    # Generar archivo con faltantes
    with open('/tmp/extensiones_faltantes.csv', 'w') as f:
        f.write("EXTENSION,TIPO,NOMBRE,TELEFONO\n")
        for tipo, stats in tipos.items():
            for ext in stats['faltantes']:
                f.write(f"{ext['extension']},{ext['tipo']},{ext['nombre']},{ext['telefono']}\n")
    
    print("\n✓ Archivo con extensiones faltantes: /tmp/extensiones_faltantes.csv")

if __name__ == "__main__":
    main()