a
    NîÌf  ã                   @   s\   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 dd„ Z
dd	„ Zd
d„ Zdd„ ZdS )u­  
Interfaz de lÃ­nea de comandos para el Sistema de Lectura AutomÃ¡tica de Medidores.

Este mÃ³dulo implementa la interfaz de usuario basada en lÃ­nea de comandos
para interactuar con el backend del sistema.

Desarrolladores:
- Para aÃ±adir nuevos comandos, agregue nuevas funciones de manejo y actualice la lÃ³gica en run_cli()
- Para modificar el comportamiento de los comandos existentes, ajuste las funciones correspondientes
é    )ÚPromptSession)Úpatch_stdout)ÚHTML)ÚForeÚStylec                 C   sJ  t ƒ }ttj› tj› dtj› �ƒ ttj› dtj› �ƒ z¾tƒ � | 	t
dƒ¡}W d  ƒ n1 sd0    Y  | d¡r„t| |ƒ np|dkr–|  ¡  n^| d¡r¬t| |ƒ nH|dkr¾|  ¡  n6|d	krÎtƒ  n&|d
krÞW �q*nttj› dtj› �ƒ W q8 t�y   Y q8Y q8 t�y&   Y �q*Y q80 q8ttj› tj› dtj› �ƒ dS )u‰   
    Ejecuta la interfaz de lÃ­nea de comandos.

    Args:
        backend (MeterReadingBackend): Instancia del backend del sistema.
    u9   Bienvenido al Sistema de Lectura AutomÃ¡tica de Medidoresz-Use 'help' para ver los comandos disponibles.z$<ansigreen>AMI Backend></ansigreen> NÚaddÚlistÚremoveÚstatusÚhelpÚexitzDComando no reconocido. Use 'help' para ver los comandos disponibles.zSaliendo del programa...)r   Úprintr   ÚMAGENTAr   ÚBRIGHTÚ	RESET_ALLÚCYANr   Úpromptr   Ú
startswithÚhandle_add_commandÚlist_connectionsÚhandle_remove_commandr
   Ú	show_helpÚREDÚKeyboardInterruptÚEOFError)ÚbackendZsessionÚcommand© r   ú#/var/www/blue/EV-AMI-Back_02/cli.pyÚrun_cli   s0    ,



r   c           	      C   s†   |  ¡ }t|ƒdk r,ttj› dtj› �ƒ nV|dd… \}}}}d|v }d}d|v rjt|| d¡d  ƒ}|  	|t|ƒ||||¡ dS )uÔ   
    Maneja el comando para aÃ±adir una nueva conexiÃ³n.

    Args:
        backend (MeterReadingBackend): Instancia del backend del sistema.
        command (str): Comando completo ingresado por el usuario.
    é   zTUso: add <host> <port> <mode> <meter_type> [--interrogation] [--frequency <seconds>]é   z--interrogationé<   z--frequencyN)
ÚsplitÚlenr   r   ÚYELLOWr   r   ÚintÚindexÚadd_connection)	r   r   ÚpartsÚhostÚportÚmodeÚ
meter_typeZinterrogationZ	frequencyr   r   r   r   8   s    r   c                 C   st   |  ¡ }t|ƒdkr,ttj› dtj› �ƒ nDzt|d ƒ}|  |¡ W n( t	yn   ttj
› dtj› �ƒ Y n0 dS )uÙ   
    Maneja el comando para eliminar una conexiÃ³n existente.

    Args:
        backend (MeterReadingBackend): Instancia del backend del sistema.
        command (str): Comando completo ingresado por el usuario.
    é   zUso: remove <index>r!   u-   Error: El Ã­ndice debe ser un nÃºmero entero.N)r#   r$   r   r   r%   r   r   r&   Úremove_connectionÚ
ValueErrorr   )r   r   r)   r'   r   r   r   r   K   s    r   c                   C   s¶   t tj› dtj› �ƒ t dtj› dtj› d�ƒ t dtj› dtj› d�ƒ t dtj› dtj› d�ƒ t dtj› d	tj› d
�ƒ t dtj› dtj› d�ƒ t dtj› dtj› d�ƒ dS )u;   Muestra la lista de comandos disponibles y su descripciÃ³n.zComandos disponibles:z  zOadd <host> <port> <mode> <meter_type> [--interrogation] [--frequency <seconds>]u   : AÃ±ade una nueva conexiÃ³nr   z$: Lista todas las conexiones activaszremove <index>u&   : Elimina una conexiÃ³n por su Ã­ndicer
   z+: Muestra el estado de todas las conexionesr   z : Muestra esta lista de comandosr   z: Cierra el programaN)r   r   r   r   r   ÚGREENr   r   r   r   r   ]   s    r   N)Ú__doc__Zprompt_toolkitr   Zprompt_toolkit.patch_stdoutr   Zprompt_toolkit.formatted_textr   Úcoloramar   r   r   r   r   r   r   r   r   r   Ú<module>   s   '