o
    i                     @  sN   d dl mZ d dlZd dlZd dlmZ d dlmZmZ dZG dd dZ	dS )    )annotationsN)datetime)AnyOptionalzF----------------------------------------------------------------------c                   @  s   e Zd ZdZejejejeZ	ej
e	ddZedd Zedd Zed+ddZed,ddZed-ddZed.ddZed.ddZed/ddZed/ddZed/ddZed/ddZed0d1d"d#Zed2d'd(Zed-d)d*ZdS )3LogNlogszvoicebot.logc                  C  s,   t jtj} t j| st |  dS dS )z!Ensure the logs directory exists.N)ospathdirnamer   _log_file_pathexistsmakedirs)log_dir r   7/var/www/html/live_calls/homebook/services/log_utils.py_ensure_log_directory   s   zLog._ensure_log_directoryc                   C  s*   t jdu rt   tt jdddt _t jS )z"Get or create the log file handle.Nazutf-8)encoding)r   	_log_filer   openr   r   r   r   r   _get_log_file   s   
zLog._get_log_filemessagestrreturnNonec              
   C  sZ   zt  }|| d  |  W dS  ty, } ztd|  W Y d}~dS d}~ww )zWrite message to log file.
zError writing to log file: N)r   r   writeflush	Exceptionprint)r   log_fileer   r   r   _write_to_file   s   zLog._write_to_filec                   C  s   t  dS )Nz%Y-%m-%d %H:%M:%S)r   nowstrftimer   r   r   r   _ts(   s   zLog._tsc                  C  s   t } t|  t|  d S N)DASHr   r   r"   )r   r   r   r   line,   s   zLog.linetitlec                 C  s6   dt  dt  d|  dt  }t| t| d S )Nr   
[] )r'   r   r%   r   r"   r)   r   r   r   r   header2   s    z
Log.headerc                 C  s0   dt   d|  dt }t| t | d S )Nr*   r+   r   )r   r%   r'   r   r"   r,   r   r   r   	subheader8   s   zLog.subheadermsgc                 C  \   dt   d|  }zt| W n ty&   |ddd}t| Y nw t | d S )N[r+   asciireplacer   r%   r   UnicodeEncodeErrorencodedecoder"   r/   r   safe_messager   r   r   info>      zLog.infoc                 C  r0   )Nr1   z	] ERROR: r2   r3   r4   r8   r   r   r   errorI   r;   z	Log.errorc                 C  r0   )Nr1   z] WARNING: r2   r3   r4   r8   r   r   r   warningT   r;   zLog.warningc                 C  r0   )Nr1   z	] DEBUG: r2   r3   r4   r8   r   r   r   debug_   r;   z	Log.debugdetailsOptional[dict[str, Any]]c                 C  sr   t |  |d ur3ztj|ddd}t| t | W n ty2   t|}t| t | Y nw t   d S N   F)indentensure_ascii)	r   r-   jsondumpsr   r"   r   r   r(   )r)   r?   details_strr   r   r   eventj   s   
z	Log.eventlabeldatar   c                 C  sj   t |  ztj|ddd}t| t | W n ty.   t|}t| t | Y nw t   d S rA   )	r   r.   rE   rF   r   r"   r   r   r(   )rI   rJ   data_strr   r   r   rE   x   s   
zLog.jsonc                   C  s   t jrt j  dt _dS dS )zClose the log file handle.N)r   r   closer   r   r   r   close_log_file   s   

zLog.close_log_file)r   r   r   r   )r   r   )r   r   )r)   r   r   r   )r/   r   r   r   r&   )r)   r   r?   r@   r   r   )rI   r   rJ   r   r   r   )__name__
__module____qualname__r   r   r	   r
   abspath__file__	_base_dirjoinr   staticmethodr   r   r"   r%   r(   r-   r.   r:   r<   r=   r>   rH   rE   rM   r   r   r   r   r   	   s@    

	



r   )

__future__r   rE   r   r   typingr   r   r'   r   r   r   r   r   <module>   s    