
    vWi-                        d Z ddlmZmZ ddlmZmZm	Z	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 ) zz
Pydantic models for daily health metrics.

Includes models for steps, heart rate, sleep, stress, body battery, and more.
    )datetime)OptionalListDictAny)	BaseModelFieldc                   8   e Zd ZU dZ 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
         ed<    edd          Ze	e
         ed<    edd          Ze	eeef                  ed<   dS )	StepsDataz%Daily step count and related metrics..Date of the datadescriptionr   NzTotal steps takendefaultr   total_stepszTotal distance in meterstotal_distance_meterszCalories burned from stepscalories_burnedzDaily step goal	step_goalRaw API responseraw_data)__name__
__module____qualname____doc__r
   r   	date_type__annotations__r   r   intr   floatr   r   r   r   strr        4/root/projects/butler/health/models/daily_metrics.pyr   r      s%        //eC-?@@@D)@@@!&tAT!U!U!UK#UUU-2U"<. . .8E?    &+U">& & &OXc]     %uT?PQQQIx}QQQ)."4* * *HhtCH~&     r"   r   c                   x   e Zd ZU dZ 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
         ed<    edd          Ze	e
         ed<    edd          Ze	eee
f                  ed<    edd          Ze	eeef                  ed<   dS )HeartRateDatazDaily heart rate metrics..r   r   r   NResting heart rate in bpmr   resting_heart_ratezMinimum heart rate in bpmmin_heart_ratezMaximum heart rate in bpmmax_heart_ratezAverage heart rate in bpmaverage_heart_ratez&Time in each heart rate zone (minutes)heart_rate_zonesr   r   )r   r   r   r   r
   r   r   r   r'   r   r   r(   r)   r*   r+   r   r    r   r   r!   r"   r#   r%   r%      s        ##eC-?@@@D)@@@(-"=) ) )    %*E"=% % %NHSM    %*E"=% % %NHSM    )."=) ) )    27"J2 2 2htCH~.    */"4* * *HhtCH~&     r"   r%   c                   D   e Zd ZU dZ 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
         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eeef                           ed<    edd          Ze	eeef                  ed<   dS )	SleepDatazDaily sleep metrics..zDate of the sleep (night)r   r   NzTotal sleep time in secondsr   total_sleep_secondszDeep sleep time in secondsdeep_sleep_secondszLight sleep time in secondslight_sleep_secondszREM sleep time in secondsrem_sleep_secondszTime awake in secondsawake_secondsz#Overall sleep quality score (0-100)sleep_scorezSleep start timesleep_start_timezSleep end timesleep_end_timezDetailed sleep level timelinesleep_levelsr   r   )r   r   r   r   r
   r   r   r   r.   r   r   r/   r0   r1   r2   r3   r4   	time_typer5   r6   r   r   r    r   r   r!   r"   r#   r-   r-   5   sG        eC-HIIID)III)."?* * *#    ).">) ) )    */"?* * *#    (-u"=( ( (x}    $)5"9$ $ $M8C=    "'"G" " "K#    -2E"4- - -hy)    +0%JZ*[*[*[NHY'[[[385"A4 4 4L(4S#X/0    */"4* * *HhtCH~&     r"   r-   c                      e Zd ZU dZ 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
         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                  ed<    edd          Ze	eeef                  ed<   dS )
StressDatazDaily stress level metrics..r   r   r   NzAverage stress level (0-100)r   average_stress_levelzMaximum stress level (0-100)max_stress_levelzTime in rest/low stress staterest_stress_duration_secondszTime in activity stress state activity_stress_duration_secondszTime in low stress statelow_stress_duration_secondszTime in medium stress statemedium_stress_duration_secondszTime in high stress statehigh_stress_duration_secondsz;Detailed stress timeline (list of [timestamp, value] pairs)stress_timeliner   r   )r   r   r   r   r
   r   r   r   r:   r   r   r;   r<   r=   r>   r?   r@   rA   r   r   r   r   r    r!   r"   r#   r9   r9   W   s        %%eC-?@@@D)@@@*/%"@+ + +(3-    ',e"@' ' 'hsm    38%"A3 3 3 (3-    7<e"A7 7 7$hsm    27"<2 2 2#    5:E"?5 5 5"HSM    38%"=3 3 3 (3-    ,15"_, , ,OXd3i(    */"4* * *HhtCH~&     r"   r9   c                      e Zd ZU dZ 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
         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                  ed<    edd          Ze	eeef                  ed<   dS )BodyBatteryDatazDaily Body Battery metrics..r   r   r   NzTotal Body Battery chargedr   chargedzTotal Body Battery draineddrainedz"Highest Body Battery value (0-100)highest_valuez!Lowest Body Battery value (0-100)lowest_valuezMost recent Body Battery valuemost_recent_valuezADetailed Body Battery timeline (list of [timestamp, value] pairs)timeliner   r   )r   r   r   r   r
   r   r   r   rD   r   r   rE   rF   rG   rH   rI   r   r   r   r   r    r!   r"   r#   rC   rC   x   s        %%eC-?@@@D)@@@"U">  GXc]    #U">  GXc]    $)5"F$ $ $M8C=    #(%"E# # #L(3-    (-u"B( ( (x}    %*E"e% % %HhtCy!    */"4* * *HhtCH~&     r"   rC   c                   T   e Zd ZU dZ 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
         ed<    edd          Ze	eeeef                           ed<    edd          Ze	eeef                  ed<   dS )SpO2Dataz&Daily blood oxygen saturation metrics..r   r   r   NzAverage SpO2 percentager   average_spo2zMinimum SpO2 percentagemin_spo2zMaximum SpO2 percentagemax_spo2zIndividual SpO2 readingsreadingsr   r   )r   r   r   r   r
   r   r   r   rL   r   r   rM   rN   rO   r   r   r    r   r   r!   r"   r#   rK   rK      sP        00eC-?@@@D)@@@$)E";% % %L(5/    !&";! ! !Hhuo    !&";! ! !Hhuo    05u"<0 0 0HhtDcN+,    */"4* * *HhtCH~&     r"   rK   c                      e Zd ZU dZ 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
         ed<    edd          Ze	eeef                  ed<   dS )RespirationDatazDaily respiration rate metrics..r   r   r   NzAverage breaths per minuter   average_respiration_ratezMinimum breaths per minutemin_respiration_ratezMaximum breaths per minutemax_respiration_rater   r   )r   r   r   r   r
   r   r   r   rR   r   r   rS   rT   r   r   r    r   r!   r"   r#   rQ   rQ      s        ))eC-?@@@D)@@@05">1 1 1huo    -2E">- - -(5/    -2E">- - -(5/    */"4* * *HhtCH~&     r"   rQ   c                       e Zd ZU dZ 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eef                  ed<   dS )HydrationDatazDaily hydration tracking..r   r   r   Nz!Total water intake in millilitersr   total_intake_mlzDaily hydration goalgoal_mlr   r   )r   r   r   r   r
   r   r   r   rW   r   r   rX   r   r   r    r   r!   r"   r#   rV   rV      s         ##eC-?@@@D)@@@%*U"E& & &OXc]    #U4=STTTGXc]TTT)."4* * *HhtCH~&     r"   rV   c                      e Zd ZU dZ 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
         ed<    edd          Ze	eeef                  ed<   dS )
FloorsDatazDaily floors climbed..r   r   r   NzNumber of floors climbedr   floors_climbedzNumber of floors descendedfloors_descendedzDaily floor goal
floor_goalr   r   )r   r   r   r   r
   r   r   r   r[   r   r   r\   r]   r   r   r    r   r!   r"   r#   rZ   rZ      s        eC-?@@@D)@@@$)E"<% % %NHSM    ',e">' ' 'hsm    !&d@R S S SJSSS)."4* * *HhtCH~&     r"   rZ   c                   8   e Zd ZU dZ 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
         ed<    edd          Ze	e
         ed<    edd          Ze	eeef                  ed<   dS )IntensityMinutesDatazDaily intensity minutes..r   r   r   NzModerate intensity minutesr   moderate_minuteszVigorous intensity minutesvigorous_minuteszTotal intensity minutestotal_minuteszWeekly intensity goalweekly_goalr   r   )r   r   r   r   r
   r   r   r   r`   r   r   ra   rb   rc   r   r   r    r   r!   r"   r#   r_   r_      sD        ""eC-?@@@D)@@@&+e">' ' 'hsm    ',e">' ' 'hsm    $)5";$ $ $M8C=    "'"9" " "K#    */"4* * *HhtCH~&     r"   r_   c                      e Zd ZU dZ 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         ed<    edd          Ze	eeef                  ed<   dS )HRVDataz%Daily heart rate variability metrics..r   r   r   NzHRV value in millisecondsr   	hrv_valuezBaseline HRV for comparisonbaseline_hrvz'HRV status (balanced, unbalanced, etc.)statusr   r   )r   r   r   r   r
   r   r   r   rf   r   r   rg   rh   r    r   r   r   r!   r"   r#   re   re      s        //eC-?@@@D)@@@!&"=" " "Ix    %*E"?% % %L(5/    "E"K  FHSM    */"4* * *HhtCH~&     r"   re   c                       e Zd ZU dZ edd          Zeed<    edd          Ze	e
         ed	<    edd
          Ze	eeef                  ed<   dS )RHRDatazDaily resting heart rate..r   r   r   Nr&   r   r'   r   r   )r   r   r   r   r
   r   r   r   r'   r   r   r   r   r    r   r!   r"   r#   rj   rj      s         ##eC-?@@@D)@@@(-"=) ) )    */"4* * *HhtCH~&     r"   rj   c                       e Zd ZU dZ 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<    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<    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$<    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ee f                  ed/<   d-S )0LifestyleLoggingDataa~  Daily lifestyle logging from Garmin Lifestyle Logging feature.

    Tracks behaviors the user logs in the Garmin Connect app:
    alcohol, caffeine, meal quality/timing, light exercise, and intermittent fasting.
    Boolean fields (NONE type) are True when the user checked that behavior.
    Integer fields (QUANTITY type) reflect the number of drinks/cups logged per subtype.
    .r   r   r   FzAny alcohol loggedr   alcohol_loggedr   zNumber of beers loggedalcohol_beerz Number of glasses of wine loggedalcohol_winezNumber of spirit drinks loggedalcohol_spiritz%Number of other alcohol drinks loggedalcohol_otherzMorning caffeine loggedmorning_caffeine_loggedzMorning coffeesmorning_caffeine_coffeezMorning teasmorning_caffeine_teazOther morning caffeine drinksmorning_caffeine_otherzLate caffeine loggedlate_caffeine_loggedzLate-day coffeeslate_caffeine_coffeezLate-day teaslate_caffeine_teazOther late-day caffeine drinkslate_caffeine_otherzLight exercise donelight_exercisezHealthy meals eatenhealthy_mealszHeavy meals eatenheavy_mealszLate meals eaten
late_mealszIntermittent fasting doneintermittent_fastingNr   r   )!r   r   r   r   r
   r   r   r   rm   boolrn   r   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r    r   r!   r"   r#   rl   rl   
  s          eC-?@@@D)@@@ !5<PQQQNDQQQa5MNNNL#NNNa5WXXXL#XXX%7WXXXNCXXXq6]^^^M3^^^ %*E%E^$_$_$_T___#(5@Q#R#R#RSRRR %a^ L L L#LLL"'%?^"_"_"_C___ "'uBX!Y!Y!Y$YYY %a=O P P P#PPP"U1/JJJsJJJ$uQ<\]]]]]] !5<QRRRNDRRR%;PQQQM4QQQe9LMMMKMMMuU8JKKKJKKK!&uB]!^!^!^$^^^)."4* * *HhtCH~&     r"   rl   N)r   datetimer   r   r   r7   typingr   r   r   r   pydanticr	   r
   r   r%   r-   r9   rC   rK   rQ   rV   rZ   r_   re   rj   rl   r!   r"   r#   <module>r      s    : 9 9 9 9 9 9 9 , , , , , , , , , , , , % % % % % % % %    	   "    I   0    	   D       B    i   6    y   *    i   $
 
 
 
 
I 
 
 
            9   *    i   $	 	 	 	 	i 	 	 	' ' ' ' '9 ' ' ' ' 'r"   