
    je                       U d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZmZ  G d de      Zej"                  d	ej$                  d
ej&                  diZded<    G d de      Z G d de      Z G d de      Z G d de      Zy)z<Trainer assignment and session values for weekly operations.    )annotations)datetime)StrEnum)ClassVar)AliasChoices	BaseModel
ConfigDictFieldmodel_validatorc                      e Zd ZdZdZdZy)TrainerIntensitybelow
as_plannedaboveN)__name__
__module____qualname__BELOW
AS_PLANNEDABOVE     }/home/cube/projects/richard/.worktrees/nutricoach-v140-impl/dualcoach/profile/checkin_cli/weekly_operations_domain_trainer.pyr   r      s    EJEr   r   lowmediumhighzdict[TrainerIntensity, str]
_CARB_LOADc                  v   e Zd ZU dZ eddd      Zded<    e edd      	      Z	d
ed<    edd      Z
ded<    edd edd            Zded<    e edd      	      Zded<    ed edd            Zded<    edd      Zded<   ed$d       Zed%d       Zed&d        Zed'd!       Zed(d"       Zy#))TrainerSessionPayloadz5Typed payload for one bounded trainer-session record.Tforbid)frozenextrapopulate_by_nameClassVar[ConfigDict]model_configsession_donedone)validation_aliasbool i  )default
max_lengthstrworkout_summary      performance_1to5performance)geler)   intintensity_vs_plan	intensityr   i  pain_summarypain)r-   r)   operator_notec                    | j                   S N)r'   selfs    r   r(   zTrainerSessionPayload.done0          r   c                    | j                   S r=   )r2   r>   s    r   r3   z!TrainerSessionPayload.performance4   s    $$$r   c                    | j                   S r=   )r7   r>   s    r   r8   zTrainerSessionPayload.intensity8   s    %%%r   c                    | j                   S r=   )r9   r>   s    r   r:   zTrainerSessionPayload.pain<   r@   r   c                D    | j                   rt        | j                     S d S r=   )r'   r   r7   r>   s    r   	carb_loadzTrainerSessionPayload.carb_load@   s     595F5Fz$001PDPr   N)returnr*   )rF   r6   )rF   r   )rF   r.   )rF   z
str | None)r   r   r   __doc__r
   r&   __annotations__r   r   r'   r/   r2   r7   r9   r;   propertyr(   r3   r8   r:   rE   r   r   r   r    r       s!   ?)38d*L&  ^V0TUL$U =OS=!%&8-Hc 
 +0%&9;G+'  %nf=L#  rd;M3;! ! % % & & ! ! Q Qr   r    c                      e Zd ZU dZ edd      Zded<    edd	      Zd
ed<    edd	      Z	d
ed<    edd	      Z
d
ed<   edd       Zedd       Zy)TrainerAssignmentz8One exact trainer Telegram route assigned to a customer.Tr!   r"   r#   r%   r&   r0   @   
min_lengthr-   r.   user_idchat_idtopic_idc                H    | j                   | j                  | j                  fS r=   )rP   rQ   rR   r>   s    r   keyzTrainerAssignment.keyN   s    dllDMM::r   c                2    | j                   | j                  fS r=   )rQ   rR   r>   s    r   	space_keyzTrainerAssignment.space_keyR   s    dmm,,r   N)rF   ztuple[str, str, str])rF   ztuple[str, str])r   r   r   rG   r
   r&   rH   r   rP   rQ   rR   rI   rT   rV   r   r   r   rK   rK   E   sp    B)34x)PL&PA"5GS5A"5GS5Q26Hc6; ; - -r   rK   c                      e Zd ZdZy)TrainerScheduleErrorz:A dated trainer schedule entry is internally inconsistent.N)r   r   r   rG   r   r   r   rX   rX   W   s    Dr   rX   c                      e Zd ZU dZ edd      Zded<   ded<    edd	
      Zded<   ded<    edd      Z	ded<    e
d      dd       Zedd       Zedd       Zy)CustomerTrainingScheduleEntryzCOne dated training session used by deterministic adaptive planning.Tr!   rL   r%   r&   r   r      )r4   r5   r6   weekdayr   r0       rN   r.   load_categoryafter)modec                    | j                   j                         | j                  k7  rt        d      | j                  dvrt        d      | S )Nz-training schedule weekday does not match date>   r   r   restr   z*training schedule load category is invalid)r   r\   rX   r^   r>   s    r   require_matching_weekdayz6CustomerTrainingScheduleEntry.require_matching_weekdaye   sG    99$,,.&'VWW%FF&'STTr   c                    | j                   S r=   )r   r>   s    r   kst_dayz%CustomerTrainingScheduleEntry.kst_daym       yyr   c                    | j                   S r=   )r   r>   s    r   training_timez+CustomerTrainingScheduleEntry.training_timeq   rf   r   N)rF   rZ   )rF   r   )rF   r   )r   r   r   rG   r
   r&   rH   r   r\   r^   r   rc   rI   re   rh   r   r   r   rZ   rZ   [   s    M)34x)PL&P
JA!$GS$
J!;M3;'" #    r   rZ   N)rG   
__future__r   datetimer   r   enumr   typingr   pydanticr   r	   r
   r   r   r   r   r   r   r   rH   r    rK   
ValueErrorrX   rZ   r   r   r   <module>ro      s    B "    P Pw  EF+
' )QI )QX-	 -$E: EI r   