#!/usr/bin/env python3
"""
Generar configuración PJSIP solo para extensiones faltantes
"""
import csv
from datetime import datetime

def generate_coordinator_endpoint(ext, name):
    """Generar configuración para coordinador (formato dslpa/dslpb)"""
    return f"""
; {name} - Coordinador
[dslpa{ext}]
type=endpoint
context=coordinator-entry
disallow=all
allow=ulaw,alaw
transport=transport-tcp
auth=dslpa{ext}-auth
aors=dslpa{ext}
direct_media=no
dtmf_mode=rfc4733
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
callerid={name} <{ext}>
trust_id_inbound=yes
send_pai=yes
named_pickup_group=coordinators
named_call_group=coordinators

[dslpa{ext}-auth]
type=auth
auth_type=userpass
password=5252
username=dslpa{ext}

[dslpa{ext}]
type=aor
max_contacts=2
qualify_frequency=30
authenticate_qualify=yes
minimum_expiration=60
default_expiration=3600

[dslpb{ext}]
type=endpoint
context=coordinator-entry
disallow=all
allow=ulaw,alaw
transport=transport-tcp
auth=dslpb{ext}-auth
aors=dslpb{ext}
direct_media=no
dtmf_mode=rfc4733
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
callerid={name} <{ext}>
trust_id_inbound=yes
send_pai=yes
named_pickup_group=coordinators
named_call_group=coordinators

[dslpb{ext}-auth]
type=auth
auth_type=userpass
password=5252
username=dslpb{ext}

[dslpb{ext}]
type=aor
max_contacts=2
qualify_frequency=30
authenticate_qualify=yes
minimum_expiration=60
default_expiration=3600
"""

def generate_special_endpoint(ext, name, tipo):
    """Generar endpoint para extensiones especiales"""
    contexts = {
        'USUARIO': 'special-functions',
        'RESCATE': 'rescue-functions',
        'CALL_CENTER_EXTERNO': 'external-cc'
    }
    context = contexts.get(tipo, 'from-internal')
    
    return f"""
; {name} - {tipo}
[{ext}]
type=endpoint
context={context}
disallow=all
allow=ulaw,alaw
transport=transport-udp
auth={ext}-auth
aors={ext}
direct_media=no
dtmf_mode=rfc4733
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
callerid="{name}" <{ext}>
trust_id_inbound=yes

[{ext}-auth]
type=auth
auth_type=userpass
password=1111
username={ext}

[{ext}]
type=aor
max_contacts=1
qualify_frequency=60
"""

def main():
    print("=== GENERADOR DE CONFIGURACIÓN PJSIP FALTANTE ===\n")
    
    # Leer extensiones faltantes
    try:
        with open('/tmp/extensiones_faltantes.csv', 'r') as f:
            reader = csv.DictReader(f)
            faltantes = list(reader)
    except FileNotFoundError:
        print("ERROR: Primero ejecute 01_check_existing_extensions.py")
        return
    
    # Generar configuración
    output_file = '/etc/asterisk/pjsip_new_endpoints.conf'
    
    with open(output_file, 'w') as f:
        f.write(f""";
; Extensiones faltantes para nueva estructura
; Generado: {datetime.now()}
; Total: {len(faltantes)} extensiones
;
; INCLUIR EN pjsip.conf: #include pjsip_new_endpoints.conf
;

""")
        
        # Agrupar por tipo
        by_type = {}
        for ext in faltantes:
            tipo = ext['TIPO']
            if tipo not in by_type:
                by_type[tipo] = []
            by_type[tipo].append(ext)
        
        # Generar por tipo
        for tipo, extensions in by_type.items():
            f.write(f"\n; ========== {tipo} ({len(extensions)} extensiones) ==========\n")
            
            for ext in extensions:
                if tipo == 'COORDINADOR':
                    config = generate_coordinator_endpoint(ext['EXTENSION'], ext['NOMBRE'])
                else:
                    config = generate_special_endpoint(ext['EXTENSION'], ext['NOMBRE'], tipo)
                
                f.write(config)
                f.write("\n")
    
    print(f"✓ Configuración generada: {output_file}")
    print(f"  Total extensiones: {len(faltantes)}")
    for tipo, extensions in by_type.items():
        print(f"  {tipo}: {len(extensions)}")
    
    print("\nPara activar:")
    print("1. Revisar el archivo generado")
    print("2. Agregar al final de /etc/asterisk/pjsip.conf:")
    print("   #include pjsip_new_endpoints.conf")
    print("3. Ejecutar: asterisk -rx 'pjsip reload'")

if __name__ == "__main__":
    main()