U
    ^¨jU  ã                   @   st   d dl Z d dl mZmZ d dlZdZej ej e¡¡Z	ej 
e	e¡Zdd„ Zdd„ Zdd	„ Zd
d„ Zddd„ZdS )é    N)ÚcredentialsÚ	messagingzserviceAccountKey.jsonc               
   C   s€   t js|zDtj t¡r2t t¡} t  | ¡ t	dƒ nt	dt
› dt› d�ƒ W n0 tk
rz } zt	d|› �ƒ W 5 d}~X Y nX dS )z3Inicializa la App de Firebase solo si no existe ya.z&[FIREBASE] Inicializado correctamente.u   [FIREBASE] No se encontrÃ³ z en z. Push desactivado.z [FIREBASE] Error inicializando: N)Úfirebase_adminÚ_appsÚosÚpathÚexistsÚ	CRED_PATHr   ÚCertificateÚinitialize_appÚprintÚAPI_KEY_FILENAMEÚ	Exception)ÚcredÚe© r   úG/var/www/itgmanager/itgmanager/blueprints/notifications/push_service.pyÚinitialize_firebase   s    


r   c              
   C   sŒ   t ƒ  zDt | |¡}td|j› d|› �ƒ |jdkrFtd|j› d�ƒ W dS  tk
r† } ztd|› d|› �ƒ W Y ¢d	S d
}~X Y nX d
S )u{   
    Suscribe uno o mÃ¡s tokens de dispositivos (FCM Tokens) a un tÃ³pico.
    'tokens' debe ser una lista de strings.
    z[FCM SUBSCRIBE] z tokens suscritos a r   z[FCM SUBSCRIBE] Fallaron z tokens.Tz+[FCM SUBSCRIBE ERROR] Error suscribiendo a ú: FN)r   r   Úsubscribe_to_topicr   Úsuccess_countÚfailure_countr   ©ÚtokensZ
topic_nameÚresponser   r   r   r   Úsubscribe_token_to_topic   s    
r   c                 C   s|   | r|sdS |D ]f}z*t  | g|¡}td|› d|j› d�ƒ W q tk
rt } ztd|› d|› �ƒ W 5 d}~X Y qX qdS )uŠ   
    Suscribe forzosamente un token a una lista de tÃ³picos desde el Backend.
    lista_centros: ["Loslagos-Puertomontt-Huelmo", ...]
    Nz) [BACKEND SUBSCRIPTION] Token suscrito a r   u    Ã©xitoz Error suscribiendo backend a )r   r   r   r   r   )Ú	fcm_tokenÚlista_centrosÚcentror   r   r   r   r   Úsuscribir_token_a_topicos,   s    r   c              
   C   sl   z*t  | |¡}|jdkr&td|› �ƒ W dS  tk
rf } ztd|› d|› �ƒ W Y ¢dS d}~X Y nX dS )uG   
    Elimina la suscripciÃ³n de un token a un tÃ³pico especÃ­fico.
    r   z%[FCM UNSUBSCRIBE] Token eliminado de Tu+   [FCM UNSUBSCRIBE ERROR] FallÃ³ al salir de r   FN)r   Úunsubscribe_from_topicr   r   r   r   r   r   r   Údesuscribir_token_de_topicosA   s    
r!   c                 C   s*  t ƒ  | › }i }|r2| ¡ D ]\}}t|ƒ||< qzªd}	|r`tj| d¡| d¡| d¡dd�}	tjtj||d�||tjdd	|	d
�tj	dditj
tjdddd�d�d�d�}
t |
¡}td|ƒ td|› d|› �ƒ d|fW S  tk
�r$ } z(td|› d|› �ƒ dt|ƒf W Y ¢S d}~X Y nX dS )uy   
    EnvÃ­a una notificaciÃ³n a todos los dispositivos suscritos a un centro.
    topic: "centro_REGION-AREA-CENTRO"
    NÚcolorÚandroid_channel_idÚiconT)r"   Ú
channel_idr$   Údefault_sound)ÚtitleÚbodyÚhighi  )ÚpriorityÚttlÚnotificationzapns-priorityÚ10Údefaulté   )ÚsoundÚcontent_availableÚbadge)Úaps)ÚheadersÚpayload)r,   ÚdataÚtopicÚandroidÚapnsz[PUSH-iOS]  subscribe response:z[PUSH] Enviado a topic 'z': z![PUSH ERROR] No se pudo enviar a r   F)r   ÚitemsÚstrr   ÚAndroidNotificationÚgetÚMessageÚNotificationÚAndroidConfigÚ
APNSConfigÚAPNSPayloadÚApsÚsendr   r   )Ú	centro_idr'   r(   Údata_payloadÚextra_kwargsr7   Zstr_dataÚkÚvZandroid_notification_configÚmessager   r   r   r   r   Úsend_topic_notificationP   sR    üþýÿþð


rK   )NN)r   r   r   r   r   r   ÚdirnameÚabspathÚ__file__ZBASE_DIRÚjoinr	   r   r   r   r!   rK   r   r   r   r   Ú<module>   s   