
    h!                         d dl Z d dlmZmZ d dlmZ d dlmZ d dlmZ ddl	m
Z
 ddlmZ d	d
lmZ ddlmZmZ dZe G d d             Ze G d de             Zy)    N)datedatetime)Any)	dataclass)Self   )http)format_end_date   )Data   )BodyBatteryReadingparse_body_battery_readings
   c                   X    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<   eed<   y	)
BodyBatteryEventzBody Battery event data.
event_typeevent_start_time_gmttimezone_offsetduration_in_millisecondsbody_battery_impactfeedback_typeshort_feedbackN)__name__
__module____qualname____doc__str__annotations__r   int     Y/var/www/html/python/myenv/lib/python3.12/site-packages/garth/data/body_battery/events.pyr   r      s.    "O""!!r"   r   c            
       z   e Zd ZU dZdZedz  ed<   dZedz  ed<   dZ	edz  ed<   dZ
edz  ed<   dZedz  ed<   dZeee      dz  ed<   dZeee      dz  ed	<   ed
ee   fd       Zed
edz  fd       Zed
edz  fd       Zed
edz  fd       Ze	 ddddeez  dz  dej6                  dz  d
ee   fd       Zy)BodyBatteryDataz4Legacy Body Battery events data (sleep events only).Neventactivity_nameactivity_typeactivity_idaverage_stressstress_values_arraybody_battery_values_arrayreturnc                 ,    t        | j                        S )z9Convert body battery values array to structured readings.)r   r,   )selfs    r#   body_battery_readingsz%BodyBatteryData.body_battery_readings*   s     +4+I+IJJr"   c                 @    | j                   }|r|d   j                  S dS )z"Get the latest Body Battery level.N)r0   levelr/   readingss     r#   current_levelzBodyBatteryData.current_level/   s&     --%-x|!!747r"   c                 F    | j                   }|rt        d |D              S dS )z/Get the maximum Body Battery level for the day.c              3   4   K   | ]  }|j                     y wNr3   .0readings     r#   	<genexpr>z,BodyBatteryData.max_level.<locals>.<genexpr>9        9W7==9   N)r0   maxr4   s     r#   	max_levelzBodyBatteryData.max_level5   '     --=Es999O4Or"   c                 F    | j                   }|rt        d |D              S dS )z/Get the minimum Body Battery level for the day.c              3   4   K   | ]  }|j                     y wr9   r:   r;   s     r#   r>   z,BodyBatteryData.min_level.<locals>.<genexpr>?   r?   r@   N)r0   minr4   s     r#   	min_levelzBodyBatteryData.min_level;   rC   r"   )clientdate_strrH   c                   |xs t         j                  }t        |      }d| }	 |j                  |      }t        |t              sg S g }|D ]  }	 |j                  d      }|t        j                  d|        d}	n|j                  d      }
|
s#t        j                  d|        t        d      	 t        j                  |
j                  d	d
            }|j                  dd      }t        |t         t"        f      s$t        j                  dt%        |       d       d}|j                  dd      }t        |t         t"        f      s$t        j                  dt%        |       d       d}|j                  dd      }t        |t         t"        f      s$t        j                  dt%        |       d       d}t'        |j                  dd      |t!        |      t!        |      t!        |      |j                  dd      |j                  dd            }	|j                  d      }|4t        |t              s$t        j                  dt%        |       d       d}|j                  d      }|4t        |t              s$t        j                  dt%        |       d       d}|j                  d       }|:t        |t         t"        f      s$t        j                  d!t%        |       d       d}|j)                   | |	|j                  d"      |j                  d#      |j                  d$      |||%              t+        |      }t+        |      }||k  r$||z
  }t        j,                  d+| d,| d-| d.       |S # t        $ r$}t        j                  d|        g cY d}~S d}~ww xY w# t        t        f$ r/}t        j                  d|
 d|        t        d|
       |d}~ww xY w# t        $ r&}t        j                  d&| d'|        Y d}~d}~wt        $ r(}t        j                  d(| d'| d)*       Y d}~d}~ww xY w)/z,Get Body Battery events for a specific date.z./wellness-service/wellness/bodyBattery/events/z%Failed to fetch Body Battery events: Nr&   zMissing event data in item: eventStartTimeGmtz)Missing eventStartTimeGmt in event data: z)eventStartTimeGmt is required but missingZz+00:00zInvalid datetime format 'z': z"Invalid eventStartTimeGmt format: timezoneOffsetr   zInvalid timezone_offset type: z	, using 0durationInMillisecondsz%Invalid durationInMilliseconds type: bodyBatteryImpactz Invalid bodyBatteryImpact type: 	eventType feedbackTypeshortFeedback)r   r   r   r   r   r   r   stressValuesArrayz Invalid stressValuesArray type: z, using NonebodyBatteryValuesArrayz%Invalid bodyBatteryValuesArray type: averageStresszInvalid averageStress type: activityNameactivityType
activityId)r&   r'   r(   r)   r*   r+   r,   z2Data validation error for Body Battery event item z: z1Unexpected error parsing Body Battery event item T)exc_infozBody Battery events parsing: /z successful, z skipped due to data issues)r	   rH   r
   
connectapi	Exceptionloggingwarning
isinstancelistgeterror
ValueErrorr   fromisoformatreplaceAttributeErrorr    floattyper   appendleninfo)clsrI   rH   pathresponseeeventsitem
event_datar&   event_start_time_strr   r   duration_msbattery_impactstress_valuesbattery_values
avg_stresstotal_itemsparsed_eventsskippeds                        r#   rb   zBodyBatteryData.getA   s    &4;;"8,?zJ	((.H
 (D)I @	D!XXg.
 %OO&B4&$IJ E ,6>>:M+N(/G)l, )G !/7/E/E088hG0, '1nn5Eq&IO%oU|D<#O45Y@ +,",..1I1"MK%kC<@C#K01< '(%/^^4G%KN%nsElC>#N34I? *+,#->>+r#B-A(+O(<14[1A,/,?&0nn^R&H'1~~or'JE !%)< = ,Z!46 OO:./|= %)M!%*B!C!-j"D7 OO?/0> &*N "XXo6
)*e3 OO6
+,L: "&J#&*hh~&>&*hh~&>$(HH\$:'1,92@
M@	F (mF;&!M1GLL/a} M&i'BD
 i  	OOCA3GHI	B '7 !  45S= )@346  !!!r  HfBqc#  GfBqc#!
 sg   N A%O98%N8I'O9	N5N0*N50N58O6*O11O66O99	QP##Q/QQr9   )r   r   r   r   r&   r   r   r'   r   r(   r)   r*   rh   r+   ra   r    r,   r   propertyr   r0   r6   rB   rG   classmethodr   r	   Clientr   rb   r!   r"   r#   r%   r%      s]   >%)Ed") $M3:$ $M3:$"Kt"#'NEDL'26d3i4/68<tDI5<Kt,>'? K K 8sTz 8 8
 P3: P P
 P3: P P
  '+a &*	a*t#a d"	a
 
da ar"   r%   )r^   r   r   typingr   pydantic.dataclassesr   typing_extensionsr   rQ   r	   utilsr
   _baser   r5   r   r   MAX_WORKERSr   r%   r!   r"   r#   <module>r      s^     #  * "  $  E  	 	 	 Dd D Dr"   