o
    ìcj                     @   sP   d Z ddlmZmZ ddlmZ ddlmZ eddgdZded	efd
dZ	dS )u@   Rutas de depuración ARI (solo para diagnóstico en desarrollo).    )	APIRouterHTTPExceptionsummarize_channel)CallServicez/debugdebug)prefixtagscall_servicereturnc                    s   t ddtf fdd}t ddtdtf fdd}t d	dtf fd
d}t ddtdtf fdd}t ddtdtf fdd}t S )Nz	/channelsr   c                     s*    j  I d H } t| dd | D dS )Nc                 S   s   g | ]}t |qS  r   ).0chr   r   :/var/www/html/bot-asterisk-ari/backend/api/debug_routes.py
<listcomp>   s    zBcreate_debug_router.<locals>.list_ari_channels.<locals>.<listcomp>)countchannels)arilist_channelslen)r   r
   r   r   list_ari_channels   s
   z.create_debug_router.<locals>.list_ari_channelsz/channels/{channel_id}
channel_idc              
      s   z j | I d H }W n ty! } z	tdt|d|d }~ww i }dD ]}z j | |I d H }|d ur;|||< W q& tyE   Y q&w t||dS )N  status_codedetail)	UNICASTRTP_LOCAL_ADDRESSUNICASTRTP_LOCAL_PORTUNICASTRTP_REMOTE_ADDRESSUNICASTRTP_REMOTE_PORTRTPAUDIOQOSRTPAUDIOQOSBRIDGEDRTPAUDIOQOSJITTERRTPAUDIOQOSLOSSRTPAUDIOQOSRTT)channelrtp_variables)r   get_channel	Exceptionr   strget_channel_variabler   )r   r&   excrtp_varsnamevaluer   r   r   get_ari_channel   s(   z,create_debug_router.<locals>.get_ari_channelz/bridgesc                     s     j  I d H } t| | dS )N)r   bridges)r   list_bridgesr   )r1   r   r   r   list_ari_bridges1   s   z-create_debug_router.<locals>.list_ari_bridgesz/bridges/{bridge_id}	bridge_idc              
      sB   z
 j | I d H W S  ty  } z	tdt|d|d }~ww )Nr   r   )r   
get_bridger)   r   r*   )r4   r,   r   r   r   get_ari_bridge6   s   z+create_debug_router.<locals>.get_ari_bridgez/calls/{call_id}/snapshotcall_idc                    s     | }|stdddg }|jD ]0}z j|I d H }|t| W q tyC } z||t|d W Y d }~qd }~ww d }|j	rpz j
|j	I d H }W n tyo } z|j	t|d}W Y d }~nd }~ww | ||ddS )Nr   zCall not foundr   )iderroru   Un puente con un solo canal no mezcla audio con otro interlocutor. Para audio bidireccional hace falta externalMedia, playback/TTS o un 2.º canal.)callr   bridge
media_note)get_callr   channel_idsr   r(   appendr   r)   r*   r4   r5   	to_public)r7   r:   r   ch_idr   r,   r;   r   r   r   call_snapshot=   s4   

 z*create_debug_router.<locals>.call_snapshot)routergetdictr*   )r
   r   r0   r3   r6   rB   r   r   r   create_debug_router   s   rF   N)
__doc__fastapir   r   ari.debug_logr   services.call_servicer   rC   rF   r   r   r   r   <module>   s    