
    0li4                        d Z ddlmZ ddlmZ ddlmZmZ  G d de          Z G d de          Z G d	 d
e          Z	 G d de          Z
 G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          ZdS ) z+Pydantic models for WHOOP API v2 responses.    )datetime)Optional)	BaseModelFieldc                       e Zd ZU dZdZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   dZeed	<   dZeed
<   dS )SleepStagesz&Sleep stage breakdown in milliseconds.r   total_in_bed_time_millitotal_awake_time_millitotal_no_data_time_millitotal_light_sleep_time_milli total_slow_wave_sleep_time_millitotal_rem_sleep_time_millisleep_cycle_countdisturbance_countN)__name__
__module____qualname____doc__r	   int__annotations__r
   r   r   r   r   r   r        l/Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/src/whoop_mcp/models.pyr   r      s         00#$S$$$"#C###$%c%%%() #))),-$c---&''''ssr   r   c                       e Zd ZU dZdZee         ed<   dZee	         ed<   dZ
ee         ed<   dZee         ed<   dZee         ed<   dZee         ed<   dS )	
SleepScorezSleep quality metrics.Nstage_summarysleep_neededrespiratory_ratesleep_performance_percentagesleep_consistency_percentagesleep_efficiency_percentage)r   r   r   r   r   r   r   r   r   dictr   floatr   r    r!   r   r   r   r   r      s           +/M8K(///#'L(4.'''(,huo,,,48 (5/88848 (5/88837%77777r   r   c                       e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   dZee	         ed	<   d
Z
eed<   e	ed<   dZee         ed<   dS )SleepzSleep record from WHOOP API.iduser_id
created_at
updated_atstartendNtimezone_offsetFnapscore_statescore)r   r   r   r   r   r   r   r,   r   strr-   boolr/   r   r   r   r   r%   r%      s         &&GGGLLLOOO	MMM%)OXc])))C"&E8J&&&&&r   r%   c                       e Zd ZU dZdZeed<   dZee	         ed<   dZ
ee         ed<   dZee         ed<   dZee         ed<   dZee         ed	<   dS )
RecoveryScorezRecovery metrics from WHOOP.Fuser_calibratingNrecovery_scoreresting_heart_ratehrv_rmssd_millispo2_percentageskin_temp_celsius)r   r   r   r   r4   r1   r   r5   r   r   r6   r#   r7   r8   r9   r   r   r   r3   r3   ,   s         &&"d"""$(NHSM(((*....'+OXe_+++'+OXe_+++)-x-----r   r3   c                   j    e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   dZe	e
         ed	<   dS )
RecoveryzRecovery record from WHOOP API.cycle_idsleep_idr'   r(   r)   r.   Nr/   )r   r   r   r   r   r   r   r0   r/   r   r3   r   r   r   r;   r;   6   sl         ))MMMMMMLLL%)E8M")))))r   r;   c                   L    e Zd ZU dZdZeed<   dZeed<   dZe	ed<   dZ
e	ed<   dS )	StrainScorezStrain metrics from WHOOP.g        strain	kilojouler   average_heart_ratemax_heart_rateN)r   r   r   r   r@   r#   r   rA   rB   r   rC   r   r   r   r?   r?   A   sY         $$FEIuNCr   r?   c                       e Zd ZU dZeed<   eed<   eed<   eed<   eed<   dZee         ed<   dZ	ee
         ed	<   e
ed
<   dZee         ed<   dS )Cyclez7Physiological cycle (typically one day) from WHOOP API.r&   r'   r(   r)   r*   Nr+   r,   r.   r/   )r   r   r   r   r   r   r   r+   r   r,   r0   r/   r?   r   r   r   rE   rE   I   s         AAGGGLLLOOO"C(	"""%)OXc])))#'E8K '''''r   rE   c                       e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   dZee	         ed	<   eed
<   e	ed<   dZ
ee         ed<   dS )Workoutz'Workout/activity record from WHOOP API.r&   r'   r(   r)   r*   r+   Nr,   sport_idr.   r/   )r   r   r   r   r   r   r   r,   r   r0   r/   r?   r   r   r   rG   rG   V   s         11GGGLLLOOO	MMM%)OXc])))MMM#'E8K '''''r   rG   c                       e Zd ZU dZeed<    edd          Zee	         ed<    edd          Z
ee	         ed<    edd	          Zee	         ed
<   dS )	TodayDataz0Combined today's health data for daily check-in.dateNzRecovery score and metricsdefaultdescriptionrecoveryzLast night's sleep datasleepzCurrent day strainr@   )r   r   r   r   r0   r   r   rO   r   r"   rP   r@   r   r   r   rJ   rJ   f   s         ::
III$uT?[\\\Hhtn\\\!E$<UVVVE8D>VVV"U4=QRRRFHTNRRRRRr   rJ   c                   2   e Zd ZU dZeed<    edd          Zee	         ed<    edd          Z
ee         ed<    edd	          Zee         ed
<    edd          Zee         ed<    edd          Zee         ed<    edd          Zeed<   dS )RecoverySummaryz%Simplified recovery data for display.rK   NzRecovery score 0-100rL   r/   zHRV in millisecondshrvzResting heart raterhrzBlood oxygen percentagespo2zSkin temperature celsius	skin_tempunknownzgreen/yellow/red zonezone)r   r   r   r   r0   r   r   r/   r   r   rS   r#   rT   rU   rV   rX   r   r   r   rR   rR   n   s         //
III 5;QRRRE8C=RRR 5;PQQQC%QQQ 5;OPPPC%PPP!E$<UVVVD(5/VVV!&tA[!\!\!\Ix\\\i5LMMMD#MMMMMr   rR   c                   2   e Zd ZU dZeed<    edd          Zeed<    edd          Z	e
e         ed	<    edd
          Ze
e         ed<    edd          Zeed<    edd          Zeed<    edd          Zeed<    edd          Zeed<   dS )SleepSummaryz"Simplified sleep data for display.rK   r   zTotal sleep hoursrL   total_hoursNzSleep efficiency %
efficiencyzSleep performance %performancezLight sleep hourslight_hourszDeep/SWS hours
deep_hourszREM sleep hours	rem_hourszNumber of disturbancesdisturbances)r   r   r   r   r0   r   r   r[   r#   r\   r   r]   r^   r_   r`   ra   r   r   r   r   rZ   rZ   y   s	        ,,
IIIq6IJJJKJJJ"'%BV"W"W"WJWWW#(5CX#Y#Y#YK%YYYq6IJJJKJJJa5EFFFJFFFuQ4EFFFIuFFFa5MNNNL#NNNNNr   rZ   c                       e Zd ZU dZeed<    edd          Zeed<    edd          Z	eed<    edd	          Z
eed
<    edd          Zeed<   dS )StrainSummaryz#Simplified strain data for display.rK   r   zDay strain 0-21rL   
day_strainKilojoules burnedcaloriesAverage heart rateavg_hrzMax heart ratemax_hrN)r   r   r   r   r0   r   r   rd   r#   rf   rh   r   ri   r   r   r   rc   rc      s         --
IIIa5FGGGJGGGeA3FGGGHeGGG%/CDDDFCDDD%/?@@@FC@@@@@r   rc   c                      e Zd ZU dZ ed          Zeed<    ed          Zeed<    ed          Z	eed<    ed	d
          Z
eed<    edd          Zee         ed<    edd          Zeed<    edd          Zeed<    edd          Zeed<    edd          Zeed<    edd          Zeed<   dS )WorkoutSummaryz$Simplified workout data for display.z
Workout ID)rN   r&   zDate of workout (YYYY-MM-DD)rK   zStart time (HH:MM)timeUnknownz.Activity name (e.g., Surfing, Mountain Biking)rL   
sport_nameNzWHOOP sport IDrH   r   zWorkout duration in minutesduration_minuteszWorkout strain 0-21r@   rg   rh   zMaximum heart rateri   re   rf   )r   r   r   r   r   r&   r0   r   rK   rl   rn   rH   r   r   ro   r#   r@   rh   ri   rf   r   r   r   rk   rk      sV        ..e---B---"@AAAD#AAA"6777D#777eI;klllJlll#eD>NOOOHhsmOOO#eA;XYYYeYYYE!1FGGGFEGGG%/CDDDFCDDD%/CDDDFCDDDeA3FGGGHeGGGGGr   rk   N)r   r   typingr   pydanticr   r   r   r   r%   r3   r;   r?   rE   rG   rJ   rR   rZ   rc   rk   r   r   r   <module>rr      s   1 1             % % % % % % % %	 	 	 	 	) 	 	 	8 8 8 8 8 8 8 8' ' ' ' 'I ' ' '. . . . .I . . .* * * * *y * * *    )   
( 
( 
( 
( 
(I 
( 
( 
(( ( ( ( (i ( ( ( S S S S S	 S S SN N N N Ni N N N	O 	O 	O 	O 	O9 	O 	O 	OA A A A AI A A AH H H H HY H H H H Hr   