
    i!                         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dS )    N)datedatetime)Any)	dataclass)Self   )http)format_end_date   )Data   )BodyBatteryReadingparse_body_battery_readings
   c                   Z    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<   d	S )
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/root/projects/butler/venv/lib/python3.11/site-packages/garth/data/body_battery/events.pyr   r      si         ""OOO""""!!!!r"   r   c            
          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j        dz  d
ee         fd            ZdS )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JJJr"   c                 2    | j         }|r|d         j        ndS )z"Get the latest Body Battery level.N)r0   levelr/   readingss     r#   current_levelzBodyBatteryData.current_level/   s#     -%-7x|!!47r"   c                 J    | j         }|rt          d |D                       ndS )z/Get the maximum Body Battery level for the day.c              3   $   K   | ]}|j         V  d S Nr3   .0readings     r#   	<genexpr>z,BodyBatteryData.max_level.<locals>.<genexpr>9   $      99W7=999999r"   N)r0   maxr4   s     r#   	max_levelzBodyBatteryData.max_level5   3     -=EOs999999994Or"   c                 J    | j         }|rt          d |D                       ndS )z/Get the minimum Body Battery level for the day.c              3   $   K   | ]}|j         V  d S r9   r:   r;   s     r#   r>   z,BodyBatteryData.min_level.<locals>.<genexpr>?   r?   r"   N)r0   minr4   s     r#   	min_levelzBodyBatteryData.min_level;   rB   r"   )clientdate_strrG   c                	   |pt           j        }t          |          }d| }	 |                    |          }n0# t          $ r#}t          j        d|            g cY d}~S d}~ww xY wt          |t                    sg S g }|D ]*}	 |	                    d          }|t          j        d|            d}	n4|	                    d          }
|
s&t          j
        d|            t          d          	 t          j        |
                    d	d
                    }nF# t          t          f$ r2}t          j
        d|
 d|            t          d|
           |d}~ww xY w|	                    dd          }t          |t           t"          z            s't          j        dt%          |           d           d}|	                    dd          }t          |t           t"          z            s't          j        dt%          |           d           d}|	                    dd          }t          |t           t"          z            s't          j        dt%          |           d           d}t'          |	                    dd          |t!          |          t!          |          t!          |          |	                    dd          |	                    dd                    }	|	                    d          }|<t          |t                    s't          j        dt%          |           d           d}|	                    d          }|<t          |t                    s't          j        dt%          |           d           d}|	                    d           }|Dt          |t           t"          z            s't          j        d!t%          |           d           d}|                     | |	|	                    d"          |	                    d#          |	                    d$          |||%                     # 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t+          |          }t+          |          }||k     r#||z
  }t          j        d+| d,| d-| d.           |S )/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	   rG   r
   
connectapi	Exceptionloggingwarning
isinstancelistgeterror
ValueErrorr   fromisoformatreplaceAttributeErrorr    floattyper   appendleninfo)clsrH   rG   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#   ra   zBodyBatteryData.getA   s    &4;"8,,JJJ	((..HH 	 	 	OGAGGHHHIIIIII	 (D)) 	I @	 @	D!XXg..
 %O$I4$I$IJJJ EE ,6>>:M+N+N(/ ,), ,   )G  !/7/E088hGG0 0,, '7 ! ! != 4= =9:= =   )636 6   !!! '1nn5Eq&I&IO%osU{CC ,@#O44@ @ @   +,",..1I1"M"MK%k3;?? (<#K00< < <   '(%/^^4G%K%KN%ncEkBB +?#N33? ? ?   *+,#->>+r#B#B-A(+O(<(<14[1A1A,/,?,?&0nn^R&H&H'1~~or'J'J  E !%)< = = ,Z!46 6, O=..= = =   %)M!%*B!C!C!-j"D7 7- O>//> > >   &*N "XXo66
)*e3 3) O:
++: : :   "&JC#&*hh~&>&>&*hh~&>&>$(HH\$:$:'1,92@  
 
 
 
    ## # # #      ## # # #!   
  (mmF;&&!M1GLD D D D D&D D D  
 se   : 
A'A"A'"A'	A/Q9(D"!Q"E%3-E  E%%K)Q
R.Q::R.R))R.r9   )r   r   r   r   r&   r   r   r'   r   r(   r)   r*   rg   r+   r`   r    r,   r   propertyr   r0   r6   rA   rF   classmethodr   r	   Clientr   ra   r!   r"   r#   r%   r%      s        >>%)Ed"))) $M3:$$$ $M3:$$$"Kt"""#'NEDL'''26d3i4/6668<tDI5<<<Kt,>'? K K K XK 8sTz 8 8 8 X8
 P3: P P P XP
 P3: P P P XP
  '+a &*	a a a*t#a d"	a
 
da a a [a a ar"   r%   )r]   r   r   typingr   pydantic.dataclassesr   typing_extensionsr   rP   r	   utilsr
   _baser   r5   r   r   MAX_WORKERSr   r%   r!   r"   r#   <module>r      s/    # # # # # # # #       * * * * * * " " " " " "       $ $ $ $ $ $       E E E E E E E E  	 	 	 	 	 	 	 	 D D D D Dd D D D D Dr"   