o
    nYi                     @   sT   d dl Z d dlmZ d dlmZ ddlmZ ddlmZm	Z	m
Z
 G dd deZdS )	    N)trigger)	BaseRelay   )Call)NotificationDetectStateConnectStatec                       s   e Zd Z fddZedd Zdd Zddd	d
dZddd	ddZdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Z  ZS )*Callingc                    s   t  | g | _d S N)super__init__calls)selfclient	__class__ e/var/www/html/asistente-voz-ia/venv/lib/python3.10/site-packages/signalwire/relay/calling/__init__.pyr      s   
zCalling.__init__c                 C   s   dS )Ncallingr   )r   r   r   r   service   s   zCalling.servicec                 C   sT  |d |d d< |d t jkr| |d  d S |d t jkr(| |d  d S |d t jkr8| |d  d S |d t jkrH| |d  d S |d t j	krX| 
|d  d S |d t jkrh| |d  d S |d t jkrx| |d  d S |d t jkr| |d  d S |d t jkr| |d  d S |d t jkr| |d  d S d S )N
event_typeparams)r   STATE	_on_stateRECEIVE_on_receiveCONNECT_on_connectPLAY_on_playCOLLECT_on_collectRECORD
_on_recordFAX_on_faxSEND_DIGITS_on_send_digitsTAP_on_tapDETECT
_on_detect)r   notificationr   r   r   notification_handler   s,   zCalling.notification_handlerphoneN)	call_typetimeoutc                C   s&   t | d}||_||_||_||_|S N)r   )r   r/   from_number	to_numberr0   r   r/   r2   r3   r0   callr   r   r   new_call'   s   
zCalling.new_callc                   s2   t | d}||_||_||_||_| I d H S r1   )r   r/   r2   r3   r0   dialr4   r   r   r   r7   /   s   
zCalling.dialc                 C   s   | j | d S r
   )r   appendr   r5   r   r   r   add_call7   s   zCalling.add_callc                 C   s2   z	| j | W d S  ty   td Y d S w )NzCall to remove not found)r   remove
ValueErrorloggingwarnr9   r   r   r   remove_call:   s
   zCalling.remove_callc                 C   "   | j D ]}|j|kr|  S qd S r
   )r   id)r   call_idr5   r   r   r   _get_call_by_id@   
   

zCalling._get_call_by_idc                 C   r@   r
   )r   tag)r   rE   r5   r   r   r   _get_call_by_tagF   rD   zCalling._get_call_by_tagc                 C   s   |  |d }|dd }|d u r|d ur| |}|d ur=|jd u r-|d |_|d |_ttj||jd |	| d S d|v rPd|v rPt
dd| i|}d S td|d  d S )	NrB   rE   node_idsuffixpeerr   zUnknown call {0}r   )rC   getrF   rA   rG   r   r   r   rE   _state_changedr   r=   errorformat)r   r   r5   rE   r   r   r   r   L   s   



zCalling._on_statec                 C   s0   t dd| i|}t| jj|| |jd d S )Nr   rH   r   )r   r   r   protocolctx_receive_uniquecontextr   r   r5   r   r   r   r   ]   s   zCalling._on_receivec                 C   s   |  |d }|d }|d urLz|tjkr |  |d d |_nd |_W n	 ty-   Y nw ttj||jd t|j|dd t|j|d| d d S d S )NrB   connect_staterJ   rH   zconnect.stateChangezconnect.)	rC   r   	CONNECTEDrJ   KeyErrorr   r   r   rE   )r   r   r5   stater   r   r   r   a   s   
zCalling._on_connectc                 C   \   |  |d }|d ur,ttj||d d t|j|dd t|j|d|d  d d S d S )NrB   
control_idrH   zplay.stateChangezplay.rV   )rC   r   r   r   rE   rR   r   r   r   r   p      zCalling._on_playc                 C   sB   |  |d }|d urttj||d d t|j|dd d S d S )NrB   rX   rH   prompt)rC   r   r   r    rE   rR   r   r   r   r!   w   s
   zCalling._on_collectc                 C   rW   )NrB   rX   rH   zrecord.stateChangezrecord.rV   )rC   r   r   r"   rE   rR   r   r   r   r#   }   rY   zCalling._on_recordc                 C   sx   |  |d }|d ur:ttj||d d t|j|dd zt|j|d|d d  d W d S  ty9   Y d S w d S )NrB   rX   rH   zfax.stateChangezfax.faxtype)rC   r   r   r$   rE   rU   rR   r   r   r   r%      s   $zCalling._on_faxc                 C   rW   )NrB   rX   rH   zsendDigits.stateChangezsendDigits.rV   )rC   r   r   r&   rE   rR   r   r   r   r'      rY   zCalling._on_send_digitsc                 C   rW   )NrB   rX   rH   ztap.stateChangeztap.rV   )rC   r   r   r(   rE   rR   r   r   r   r)      rY   zCalling._on_tapc                 C   s   |  |d }|d urFttj||d d z&|d d d }|tjks(|tjkr*|nd}t|j|d d| d W d S  tyE   Y d S w d S )	NrB   rX   rH   detectr   eventupdatezdetect.)	rC   r   r   r*   r   FINISHEDERRORrE   rU   )r   r   r5   r^   rI   r   r   r   r+      s    zCalling._on_detect)__name__
__module____qualname__r   propertyr   r-   r6   r7   r:   r?   rC   rF   r   r   r   r   r!   r#   r%   r'   r)   r+   __classcell__r   r   r   r   r	      s*    

r	   )r=   signalwire.blade.handlerr   signalwire.relayr   r5   r   	constantsr   r   r   r	   r   r   r   r   <module>   s    