
    Ui                        S r SSKrSSKrSSKrSSKJr  SSKJr  \R                  R                  SS5      r	\R                  R                  SS5      r
\R                  R                  S	5      S
:H  r\" \R                  R                  SS5      5      r\" \R                  R                  SS5      5      r\R                  R                  SS5      r\R                   R#                  \R                   R%                  \R                   R'                  \5      S5      5      r\" \5      S-  S-  rS rS rSS jrS rSS jrSS jrg)z@Scheduler de notificaciones usando Clawdbot Cron (sin Telegram).    N)datetime)PathCLAWDBOT_BINclawdbotHEALTH_CRON_NAME_PREFIXzHealth reminderDRY_RUN1CRON_TIMEOUT_MS30000CRON_SUBPROCESS_TIMEOUT_S10HEALTH_CRON_SESSIONmainz..datazscheduled_notifications.jsonc                      [         R                  5       (       d  / $ [        [         SSS9 n [        R                  " U 5      sS S S 5        $ ! , (       d  f       g = f)Nrutf-8encoding)SCHEDULE_PATHexistsopenjsonload)fs    ;/home/sebas/health-system/scripts/notification_scheduler.py_loadr      s;    !!		mS7	3qyy| 
4	3	3s   A
Ac                     [         R                  R                  SSS9  [        [         SSS9 n[        R
                  " XSSS9  S S S 5        g ! , (       d  f       g = f)	NT)parentsexist_okwr   r   F   )ensure_asciiindent)r   parentmkdirr   r   dump)itemsr   s     r   _saver)      sE    td;	mS7	3q		%q9 
4	3	3s   A
Ac                     U(       a  U$ U =(       d    SR                  5       R                  SS5      n[        U5      S:  a  US S S-   nU(       a  [         SU 3$ [        $ )N 
 (   %   z...: )stripreplacelenNAME_PREFIX)messagenamesnippets      r   _build_namer8      s]    }"##%--dC8G
7|b#2,&*1k]"WI&B{B    c                 2   ^^ [        UU4S jU  5       5      $ )Nc              3      >#    U  H3  oR                  S 5      T:H  =(       a    UR                  S5      T:H  v   M5     g7f)whenr5   N)get).0ir5   when_isos     r   	<genexpr>%_already_scheduled.<locals>.<genexpr>)   s5      KPaf!AaeeI&6'&AA5s   ;>)any)r(   r@   r5   s    ``r   _already_scheduledrD   (   s     KP  r9   c           	         [        5       n[        X@U5      (       a  g[        X5      nSU 3n[        SSSUSU S[        /	n[        S:X  a  US	U/-  nOUS
US/-  nUS[        [        5      /-  nU(       a  UR                  S5         [        (       a  [        SSR                  U5      5        O9[        R                  " US[        [        R                  [        R                  S9   UR                  X["        R$                  " 5       R'                  5       S.5        [)        U5        g! [        R                   a    [        SU  35         g[        R                    a  n[        SU  SU 35         SnAgSnAff = f)u   Agenda un recordatorio via Clawdbot Cron.

- when_iso: ISO datetime (YYYY-MM-DDTHH:MM:SS) o +duración (ej: 20m)
- message: texto del recordatorio
- name: nombre opcional del job
NuG   Enviá este recordatorio al usuario, verbatim, sin agregar nada extra:
cronaddz--namez--atz	--sessionr   z--system-eventz	--messagez	--deliverz	--timeoutz--delete-after-runzDRY_RUN cron add:r-   T)checktimeoutstdoutstderrzERROR cron add timeout for zERROR cron add for r0   )r<   r5   
created_at)r   rD   r8   r   CRON_SESSIONstrr
   appendr   printjoin
subprocessrunSUBPROCESS_TIMEOUT_SDEVNULLTimeoutExpiredCalledProcessErrorr   now	isoformatr)   )	r@   r5   r6   delete_afterr(   job_namepromptcmdes	            r   schedule_messager_   .   si    GE%7337)HR)	  	
C v &))V[11K_-..C

'(7%sxx}5NN,!))!)) 
LL(hllnF^F^F`ab	%L $$ +H:67(( #H:Rs34s$   &D( .8D( ("E:E:E55E:c                 @    U =(       d    [         R                  " 5       ng)u1   Compatibilidad: Clawdbot Cron maneja los envíos.N)r   rX   )rX   _s     r   process_duerb   l   s    x||~Ar9   )N)NT)__doc__r   osrR   r   pathlibr   environr=   r   r4   r   intr
   rT   rM   pathabspathrQ   dirname__file__BASE_DIRr   r   r)   r8   rD   r_   rb    r9   r   <module>rn      s   F  	   zz~~nj9jjnn68IJ
**..
#s
*bjjnn%6@A2::>>*EtLM zz~~3V<77??277<<(A4HIX'*HH:C;|r9   