o
    zSoj{	                     @   sj   d dl m Z mZ d dlmZ d dlmZ d dlmZmZ ed Z	ed Z
de fdd	ZG d
d deZdS )    )datetimetimezone)Literal)uuid4)	BaseModelField)ringingansweredtalkingendedfailed)inboundoutboundreturnc                   C   s   t tjS N)r   nowr   utc r   r   6/var/www/html/bot-asterisk-ari/backend/calls/models.pyutc_now   s   r   c                   @   s  e Zd ZU edd dZeed< eedZee ed< dZ	edB ed< dZ
eed	< dZeed
< dZeed< dZedB ed< dZeed< dZeed< dZeed< dZedB ed< dZedB ed< dZedB ed< dZeed< dZeed< dZeed< dZeed< dZedB ed< dZedB ed< dZedB ed< dZe ed< eedZ!ee ed< dZ"edB ed< ee#dZ$e%ed < dZ&e%dB ed!< d"ed#dfd$d%Z'd#e fd&d'Z(d-ded#dfd)d*Z)d#efd+d,Z*dS ).	CallStatec                   C   s
   t t S r   )strr   r   r   r   r   <lambda>   s   
 zCallState.<lambda>)default_factorycall_idchannel_idsN	bridge_idFoutbound_stasis_setupagent_leg_originatedexternal_media_attachedexternal_media_channel_idwebrtc_connectedr   	directionr   statusnumberdocument_iddocument_playback_iddocument_playback_donebot_media_readybot_startedtransfer_in_progresstransfer_targetpoliza_datacall_resultr   duration
transcriptagent_state
started_atended_at
channel_idr   c                 C   s   || j vr| j | d S d S r   )r   append)selfr3   r   r   r   add_channel0   s   
zCallState.add_channelc                 C   s0   | j pt }| jrtdt|| j  S | jS )Nr   )r2   r   r1   maxinttotal_secondsr.   )r5   endr   r   r   elapsed_seconds4   s   zCallState.elapsed_secondsr   c                 C   s   || _ t | _|  | _d S r   )r#   r   r2   r;   r.   )r5   r#   r   r   r   finalize:   s   zCallState.finalizec                 C   s   | j dd}|  |d< |S )Njson)moder.   )
model_dumpr;   )r5   datar   r   r   	to_public?   s   zCallState.to_public)r   )+__name__
__module____qualname__r   r   r   __annotations__listr   r   r   boolr   r   r    r!   r"   CallDirectionr#   
CallStatusr$   r%   r&   r'   r(   r)   r*   r+   r,   dictr-   r.   r8   r/   r0   r   r1   r   r2   r6   r;   r<   rA   r   r   r   r   r      s<   
 r   N)r   r   typingr   uuidr   pydanticr   r   rI   rH   r   r   r   r   r   r   <module>   s    