a
    0i+                     @   sZ   d dl Z d dlmZ e je jd e eZdd Zdd Z	dd	 Z
dddZdd ZdS )    N)get_connection)levelc           
   
   C   s  g g g ddd| d}zrt  }| }d}||| f | }|spd|d< d|  |d	< td
|   |W S |D ]j}|d r|d  nd}|d r|d   nd}|rtd|v rt|dvrd}||| vrt|| | qtt	|d t	|d  t	|d  |d< |d dkrPd|d< d|d  d|d	< t
d|  d|d  d n&d|d< d|  |d	< td|   |  |  W nT ty }	 z:d|d< dt|	 |d	< tdt|	  W Y d}	~	n
d}	~	0 0 |S )uc  
    Obtiene los destinatarios de correo electrónico desde las tablas de configuración.
    
    Args:
        mail_list_id (int): ID de la lista de correos en Util_MailListHead
        
    Returns:
        dict: Diccionario con listas de destinatarios por tipo (TO, CC, BCC)
            {
                'TO': ['correo1@example.com', 'correo2@example.com'],
                'CC': ['cc1@example.com'],
                'BCC': ['bcc1@example.com'],
                'total_destinatarios': 4,
                'success': True,
                'mensaje': 'Destinatarios obtenidos correctamente'
            }
    r   F )TOCCBCCtotal_destinatariossuccessmensajemail_list_ida  
            SELECT 
                d.Mail,
                d.RecipientType,
                d.MailListLine,
                h.Subject,
                h.ModuleID
            FROM Util_MailListDetail d
            INNER JOIN Util_MailListHead h ON d.MailListID = h.MailListID
            WHERE d.MailListID = ? 
                AND d.ActiveLine = 1 
                AND h.Active = 1
                AND d.Mail IS NOT NULL 
                AND d.Mail != ''
            ORDER BY d.MailListLine
        Tr	   z9No se encontraron destinatarios activos para MailListID: r
   z1No se encontraron destinatarios para MailListID: N   r   @r   r   r   r   r   r   zSe obtuvieron z destinatarios correctamenteMailListID z: z destinatarios obtenidosu4   No se encontraron correos válidos para MailListID: z Error al obtener destinatarios: z%Error en obtener_destinatarios_mail: )r   cursorexecutefetchallloggerwarningstripupperappendleninfoclose	Exceptionstrerror)
r   destinatarios
connectionr   query
resultadosrowmailrecipient_typee r&   >/var/www/html/src/Consultas_SQL/Utilities/MailManagementSQL.pyobtener_destinatarios_mail   s^    



*r(   c              
   C   s(  ddddddd}zt  }| }d}||| f | }|rd|d< t|d |d	< |d
 |d< |d |d< d|d< |d	 rd|  d|d< qd|  d|d< nd|d< d|  d|d< |  |  W nT ty" } z:d|d< dt| |d< t	dt|  W Y d}~n
d}~0 0 |S )u  
    Valida si existe el MailListID en la tabla Util_MailListHead.
    
    Args:
        mail_list_id (int): ID de la lista de correos
        
    Returns:
        dict: Resultado de la validación
              {
                  'existe': True/False,
                  'activo': True/False,
                  'subject': 'Asunto del correo',
                  'module_id': 'ID del módulo',
                  'success': True/False,
                  'mensaje': 'Mensaje descriptivo'
              }
    FNr   )existeactivosubject	module_idr	   r
   z
            SELECT 
                MailListID,
                ModuleID,
                Subject,
                Active,
                CreatedAt,
                CreatedBy
            FROM Util_MailListHead
            WHERE MailListID = ?
        Tr)      r*      r+   r   r,   r	   r   u    existe y está activor
   u    existe pero está inactivoz no existe en la base de datoszError al validar MailListID: z#Error en validar_mail_list_existe: )
r   r   r   fetchoneboolr   r   r   r   r   )r   	resultador   r   r    r"   r%   r&   r&   r'   validar_mail_list_existex   s>    	*r2   c              
   C   s  dddddddddddd}z0t  }| }d}||| f | }t||d< |D ]}|d }|d r~|d   nd	}t|d
 }	|	r|d  d7  < n|d  d7  < |	r|dv r|d |  d7  < n|d d	  d7  < |rd|v rd|v r|d  d7  < qZ|d  d7  < qZd|d< d|  |d< |  |  W nT t	y }
 z:d|d< dt
|
 |d< tdt
|
  W Y d}
~
n
d}
~
0 0 |S )uF  
    Obtiene estadísticas detalladas de una lista de correos.
    
    Args:
        mail_list_id (int): ID de la lista de correos
        
    Returns:
        dict: Estadísticas de la lista
              {
                  'total_registros': 5,
                  'activos': 3,
                  'inactivos': 2,
                  'por_tipo': {'TO': 2, 'CC': 1, 'BCC': 0},
                  'correos_validos': 3,
                  'correos_invalidos': 0,
                  'success': True,
                  'mensaje': 'Estadísticas obtenidas correctamente'
              }
    r   r   Fr   )total_registrosactivos	inactivospor_tipocorreos_validoscorreos_invalidosr	   r
   z
            SELECT 
                Mail,
                RecipientType,
                ActiveLine
            FROM Util_MailListDetail
            WHERE MailListID = ?
        r3   r   r   r.   r4   r5   r6   r   .r7   r8   Tr	   u(   Estadísticas obtenidas para MailListID r
   u    Error al obtener estadísticas: z)Error en obtener_estadisticas_mail_list: N)r   r   r   r   r   r   r   r0   r   r   r   r   r   )r   estadisticasr   r   r    r!   r"   r#   r$   r*   r%   r&   r&   r'   obtener_estadisticas_mail_list   sN    
	*r;   ENVIADOc                 C   s   zXt  }| }d}||| |||||||||	|
f |  |  |  dddW S  ty } z ddt| dW  Y d}~S d}~0 0 dS )uN   
    Guarda un registro de envío de correo en la tabla Util_MailSentLog.
    a	  
            INSERT INTO Util_MailSentLog
                (MailListID, Subject, RecipientsTO, RecipientsCC, RecipientsBCC,
                TemplateUsed, TemplateData, FilesSent, SentBy, Status, ErrorMsg)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        Tu   Log de envío registrado)r	   r
   FzError al guardar log: N)r   r   r   commitr   r   r   )r   r+   recipients_torecipients_ccrecipients_bcctemplate_usedtemplate_data
files_sentsent_bystatus	error_msgr   r   r    r%   r&   r&   r'   guardar_log_envio  s.    rG   c              
   C   sv   zJt  }| }d}||| f | }|  |  |rF|d nd W S  typ } zW Y d }~d S d }~0 0 d S )Nz:SELECT Subject FROM Util_MailListHead WHERE MailListID = ?r   )r   r   r   r/   r   r   )r   r   r   r    r"   r%   r&   r&   r'   obtener_subject_de_mail_listH  s    rH   )r<   N)loggingConsultas_SQL.conexionr   basicConfigINFO	getLogger__name__r   r(   r2   r;   rG   rH   r&   r&   r&   r'   <module>	   s   
hJa  
/