
    +"j                        d Z ddlmZmZmZ ddlZddlZddlZddlmZ ddl	m
Z
 ddlmZmZ ddlZdZde d	Zd
ZdZdZdZdZde dddZdede
e   fdZdefdZdefdZdefdZedk(  r e       Z ee        ee       yy)zlCoachbetter / St. James Calendar Sync Engine Fetches events via REST API and

outputs a standard .ics feed.
    )datetime	timedeltatimezoneN)
quote_plus)Optional)CalendarEventz$e837eb0a-b70e-4a55-a834-3baf7c16a660z0https://register.coachbetter.com/api/v2/seasons/z/eventsa  eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIwMTlhNTNlNS02N2ZmLTcwYjQtYjVkYi1jYzI1OTgyY2VkMTIiLCJqdGkiOiJmYjMxYmViMDFiYjViMjM4OWE3NzI5OTZmZDAzOGQyNDkyYzBkMzhmNjA1MWYwYzcwMjhlZmY3MmZiZTY3MmVjZDU2NDIyYTY0OTk3YWZiNCIsImlhdCI6MTc5MDA5MjgxOS43Njg2NzgsIm5iZiI6MTc5MDA5MjgxOS43Njg2OCwiZXhwIjoxNzkwMTc5MjE5Ljc2NzM1Mywic3ViIjoiMTY3NjkyIiwic2NvcGVzIjpbXX0.JvxsysQVqCgIOe3qk2VkLq-jyqQ4RtT4QrfjjgTLS_f3_1DgvJEqBgbVXFyPIezArKPCZOwaK8xoXMXKl6LTnTEmJ8NEufN5wbH5h8hBpGkaxShku5nfcWyN6kPDtgXl7b1MhlOKCjPekTFfTY3k8bDVyC9XZfnCkJN61KO7pMTPaPMtN5_hGmbDx2xMyfMhX2OLPs457zBjdbUSTvWUom_XV9Njo_iWIFjXqMzFfzprejDCi-srK59a_1_GzywBDCchTWgw1rfnPjmWUrALTklfT9SXRBhYg1kIlVmn35FrAo00x3Y5wyaCX1ftCo3-QKfPMf82Z9LWl0CY9i0Fbb5NGM0M41E9d3g4WHYSs7KJUCylamAXMHSybXTMiEM_vh19jEFlFM7jTbUP3m4ruoGENtaaE2FvsuwAfbo54WUMjZj8Em59rfn-jdOgH_m0pspWKGleCFC9SqgamJJw26C21V2Xt5oGSBvllmclUDzEwOQ2gVkPUbeygyjtRuqUlozyIy28Lk7QkTbGKBq4dBE4GlYmFJbxfaHGqmPxNuZb4OzbxlT07dMSCv1S-0yeQV8wJIoGUSf4RgIlwQETy4JIs498BIJ36H4eK5AdA1ZZ_cAKNhr5zVEPwluW5RnfGngaapXz9WN5Xu1tnrEbbfuSUoThcDfyGxFyJHXUyx8z"/home/ubuntu/st_james_schedule.icsz!/home/ubuntu/st_james_events.json   <   zBearer zapplication/jsonzKMozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15)AuthorizationAcceptz
User-Agentdt_strreturnc                 V    | sy| j                  dd      }t        j                  |      S )zXConverte strings UTC ISO 8601 (terminadas em Z) em objetos datetime cientes de timezone.NZz+00:00)replacer   fromisoformat)r   	clean_strs      /home/ubuntu/coachbetter_sync.pyparse_iso_datetimer   .   s)    	nnS(+)					**    c                  R   t        j                  t        j                        } | t	        t
              z
  }| t	        t              z   }g }t               }d}|}t        d|j                  d       d|j                  d       d       ||k  rt        |t	        |      z   |      }|j                  d      }|j                  d      }	||	d	}
t        d
| d|	        t        j                  t        t        |
d      }|j                  dk(  r1t        dt         j"                         t!        j$                  d       nY|j                  dk7  rJt        d|j                   d|j&                   t         j"                         t!        j$                  d       |j)                         }|j                  dg       }|D ]O  }|j                  di       }|j                  d      }|s)||vs.|j+                  |       |j-                  |       Q |t	        d      z   }||k  r|S )N)days   z[+] Consultando eventos entre z%Y-%m-%dz e z...z%Y-%m-%d 00:00:00z%Y-%m-%d 23:59:59)from_datetimeto_datetimez    -> Buscando bloco: u    até    )headersparamstimeouti  uC   [-] ERRO: Token de autenticação expirado ou inválido (HTTP 401).)file      u    [-] Falha na requisição: HTTP z - dataeventuuid)r   nowr   utcr   	DAYS_PASTDAYS_FUTUREsetprintstrftimeminrequestsgetBASE_URLHEADERSstatus_codesysstderrexittextjsonaddappend)now_utcoverall_startoverall_end
all_events
seen_uuids
CHUNK_DAYScurrent_startcurrent_end	start_strend_strr   responsepayloadchunk_eventsitemevr&   s                    r   fetch_eventsrJ   6   s   LL&'I955-)55+*u* *-&}'='=j'I&J K



z
*	+30
 	#miZ&@@+NK&&':;I""#67G(AF	#I;fWI
>?||'&"H s"
Ozz 
hhqk				$,X-A-A,B Cmm_zz
 
hhqkmmoG;;vr*L  88GR bVVF^d	$j(t$   )"33MM 	#P 
r   events_listc           	         t               }|j                  dd       |j                  dd       |j                  dd       |j                  dd       d	}| D ]M  }|j                  d
i       }|j                  dd
      }|j                  d      }t        |j                  d            }t        |j                  d            }|r|r|stt	               }	|	j                  d| d       |	j                  dt        j                  t        j                               |	j                  d|       |	j                  d|       |dk(  r|j                  dd      }
|j                  dd      }|rdnd}|j                  dd      j                         }|	j                  dd|
 d| d       d | d!|
 d"| g}t        |j                  d#            }|r$|j                  d$|j                  d%       d&       |	j                  d'd(j                  |             nQ|j                  d)d*      }|j                  d+d	      }|	j                  dd,|        |	j                  d'd-| d.|        |j                  d/      }|r|	j                  d/|       |j                  |	       |d0z  }P t        t        d1      5 }|j!                  |j#                                d d d        t%        d2| d3t                y # 1 sw Y   xY w)4Nprodidz(-//The St. James FC Coachbetter Sync//ENversionz2.0zx-wr-calnamezSt. James FC Soccerzx-wr-timezoneUTCr   r%   typer&   start_datetimeend_datetimeuidz@coachbetterdtstampdtstartdtendmatchopponentu   AdversáriohomeTCasaForaJogosummary   ⚽ Jogo: St. James vs  ()zTipo: u   Adversário: zMando de campo: meeting_datetimeu   Horário de Apresentação: z%H:%Mz UTCdescription
focusTeam Training	intensity   🏃 Treino: zAtividade: z
Intensidade: locationr"   wb[+] Sucesso:  eventos exportados para )r   r9   r0   r   r	   r   r'   r   r(   
capitalizer:   r-   joinadd_componentopenOUTPUT_ICS_PATHwriteto_icalr,   )rK   caltotal_eventsrH   
event_data	item_typer&   start_dtend_dt	cal_eventrX   is_home
venue_type
match_typedescription_parts
meeting_dtrd   rf   rh   fs                       r   generate_icsr   q   s   
#''(>?'')U''./0''/5!, 6d'2&J)I >>&!D!*..1A"BCH
~ >?FxvIMM%D6./MM)X\\(,,78MM)X&MM'6" G
M:hvt,g$6&j>>&&1<<>jmmI!8
"ZLPQRS :,
(
$ZL
)
 &jnn5G&HIj	  *:+>+>w+G*HM	
 mmM499->#?@ nnWo6e..a0immIug67mm
;ug_YKH ~~j)HmmJ)i ALm6r OT" aGGCKKM l^#<_<MN s   8 K66K?c                 D   g }| D ]  }|j                  di       }|j                  dd      }|dk(  r,d|j                  d       d|j                  d      rdnd	 d
}nd|j                  dd       }|j                  |j                  d      ||j                  d      |j                  d      |j                  dd      d        t        t        d      5 }t	        j
                  ||       d d d        t        dt        |       dt                y # 1 sw Y   (xY w)Nr%   rP   rW   r^   rX   r_   rY   rZ   r[   r`   rg   rd   re   r&   rQ   rR   rh    )rS   titlestartendrh   wrj   rk   )r0   r:   ro   OUTPUT_JSON_PATHr8   dumpr,   len)rK   shortcut_eventsrH   rI   rv   r]   r   s          r   generate_shortcut_jsonr      s!   / d	'2	B)IG)"&&*<)=R"&&QW.^d?eefggw @ABgvvf~()vvn%FF:r* $ c" "aIIoq!" c/*++DEUDVW" "s   DD__main__)__doc__r   r   r   r8   osr4   urllib.parser   typingr   	icalendarr   r	   r/   SEASON_UUIDr1   BEARER_TOKENrp   r   r)   r*   r2   strr   listrJ   r   r   __name__events r   r   <module>r      s   
 3 2  	 
 #  % 
 5=k]'R Z 7 7  	 |n- U	+s +x'9 +9d 9vGd GT < z>&v  r   