Ë
    ØÎŽjy  ã            
       óæ  — d dl Z d dlZd dlZd dlmZ d dlmZmZmZ d dlm	Z	m
Z
 d dlZd dlZd dlZd dlZdefd„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ee   fd„Zd d d d!œd"ed#ed$edee   fd%„Z G d&„ d'e	«      Z  G d(„ d)e	«      Z!y)*é    N)Údatetime)ÚDictÚListÚOptional)Ú	BaseModelÚFieldÚreturnc                  óŒ   — dj                  t        j                  t        j                  t        j
                  z   d¬«      «      S )z7Generate a 5-character alphanumeric ID (e.g., 'A3F9B').Ú é   )Úk)ÚjoinÚrandomÚchoicesÚstringÚascii_uppercaseÚdigits© ó    ú@/var/www/html/Fitness-lenito-AI-main/fitness_app/data_manager.pyÚgenerate_meal_idr      s+   € à�7‰7”6—>‘>¤&×"8Ñ"8¼6¿=¹=Ñ"HÈAÔNÓOÐOr   c                   óZ   — e Zd ZU eed<    edd¬«      Zee   ed<    edd¬«      Zeed<   y	)
Ú
IngredientÚnameÚsomez(Quantity of the ingredient, e.g., '100g')ÚdefaultÚdescriptionÚquantityu   ðŸ�½ï¸�zEmoji icon for the ingredientÚiconN)	Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   r   r   r   r   r   r   r   r      s/   … Ø
ƒIÙ#¨FÐ@jÔk€Hˆh�s‰mÓkÙ˜iÐ5TÔU€Dˆ#ÔUr   r   c                   ó,   — e Zd ZU eed<   eed<   eed<   y)ÚMacronutrientsÚcarbohydratesÚproteinÚfatN)r    r!   r"   Úfloatr$   r   r   r   r&   r&      s   … ØÓØƒNØ	„Jr   r&   c                   óš   — e Zd ZU  eed¬«      Zeed<   eed<   eed<   eed<   eed<   e	ed<   eed	<   e
e   ed
<   dZeed<   dZee   ed<   y)ÚMealzUnique 5-character meal ID)Údefault_factoryr   ÚidÚ	meal_nameÚcategoryÚsub_categoryÚtotal_caloriesÚmacronutrientsr   Úingredientsé   Únumber_of_servingsNÚimage)r    r!   r"   r   r   r.   r#   r$   r*   r&   r   r   r6   Úintr7   r   r   r   r   r,   r,       s[   … ÙÐ$4ÐB^Ô_€BˆÓ_ØƒNØƒMØÓØÓØ"Ó"ØÓØ�jÑ!Ó!ØÐ˜ÓØ€Eˆ8�C‰=Ôr   r,   c                   ó8  — e Zd ZU eed<   eed<   eed<   dZee   ed<   dZee	   ed<   e
eee   f   ed<   e
eee   f   ed<   e
eee   f   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Zee   ed<   dZee
eef      ed<   y)ÚMealPlanResponseÚuser_idÚ
blood_typeÚ	diet_typeNÚtotal_daily_caloriesÚtotal_daily_macronutrientsÚbreakfast_optionsÚlunch_optionsÚdinner_optionsÚbreakfast_imageÚlunch_imageÚdinner_imageÚbreakfast_image_idÚlunch_image_idÚdinner_image_idÚmeal_calorie_distribution)r    r!   r"   r#   r$   r>   r   r8   r?   r&   r   r   r,   rC   rD   rE   rF   rG   rH   rI   r   r   r   r:   r:   ,   sÖ   … ØƒLØƒOØƒNØ*.Ð˜( 3™-Ó.Ø;?Ð ¨Ñ 8Ó?Ø˜C  d¡˜OÑ,Ó,Ø˜˜T $™Z˜Ñ(Ó(Ø˜˜d 4™j˜Ñ)Ó)Ø%)€O�X˜c‘]Ó)Ø!%€K�˜#‘Ó%Ø"&€L�(˜3‘-Ó&Ø(,Ð˜ ™Ó,Ø$(€N�H˜S‘MÓ(Ø%)€O�X˜c‘]Ó)Ø:>Ð˜x¨¨S°#¨X©Ñ7Ô>r   r:   c                   ó†   — e Zd ZU 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   ed	<   dZ	ee   ed
<   y)ÚSwapMealRequestr;   r<   r=   r0   r1   Úcurrent_caloriesr   ÚcountryÚ	allergiesÚfood_dislikesN)
r    r!   r"   r#   r$   r8   rM   r   rN   rO   r   r   r   rK   rK   =   sL   … ØƒLØƒOØƒNØƒMØÓØÓØ€GˆX�c‰]ÓØ!€Iˆx˜‰}Ó!Ø#%€M�8˜C‘=Ô%r   rK   c                   ó<   — e Zd ZU ee   ed<   eed<   eed<   eed<   y)ÚSwapMealResponseÚalternativesÚoriginal_categoryÚoriginal_sub_categoryÚtarget_caloriesN)r    r!   r"   r   r,   r$   r#   r8   r   r   r   rQ   rQ   H   s   … Ø�t‘*ÓØÓØÓØÔr   rQ   c                   óF   — e Zd ZU dZee   ed<   eed<   eed<   ee   ed<   y)ÚMealImageRequestNr.   r/   r   r4   )	r    r!   r"   r.   r   r#   r$   r   r   r   r   r   rW   rW   N   s&   … Ø€Bˆ�‰ÓØƒNØÓØ�jÑ!Ô!r   rW   c                   ó6   — e Zd ZU dZee   ed<   dZee   ed<   y)ÚMealImageResponseNr.   Úmeal_image_base64)r    r!   r"   r.   r   r#   r$   rZ   r   r   r   rY   rY   T   s   … Ø€Bˆ�‰ÓØ'+Ð�x ‘}Ô+r   rY   c                   ó,   — e Zd ZU eed<   eed<   eed<   y)ÚHarmfulIngredientr   Úreasonr0   N©r    r!   r"   r#   r$   r   r   r   r\   r\   X   s   … Ø
ƒIØƒKØ„Mr   r\   c                   ó   — e Zd ZU eed<   y)ÚNeutralIngredientr   Nr^   r   r   r   r`   r`   ]   ó   … Ø
„Ir   r`   c                   ó   — e Zd ZU eed<   y)ÚSafeIngredientr   Nr^   r   r   r   rc   rc   a   ra   r   rc   c                   ó0   — e Zd ZU dZeed<   eed<   eed<   y)ÚFoodTypeInfozELegend entry for Beneficial / Neutral / Avoid in scan-food responses.ÚkeyÚtitler   N)r    r!   r"   Ú__doc__r#   r$   r   r   r   re   re   d   s   … ÙOØ	ƒHØƒJØÔr   re   c                  óT   — t        ddd¬«      t        ddd¬«      t        ddd¬«      gS )	NÚ
beneficialÚ
Beneficialr   )rf   rg   r   ÚneutralÚNeutralÚavoidÚAvoid)re   r   r   r   Údefault_food_typesrp   k   s2   € ô 	˜¨\ÀrÔJÜ˜¨)ÀÔDÜ˜¨¸RÔ@ðð r   F)Úhas_beneficialÚhas_neutralÚ	has_avoidrq   rr   rs   c                 ó„   — t        «       D �ci c]  }|j                  |“Œ }}|r|d   gS | r|d   gS |r|d   gS g S c c}w )zn
    Return only the single best-matching type for this scan.
    Priority: Avoid > Beneficial > Neutral.
    rn   rj   rl   )rp   rf   )rq   rr   rs   ÚtÚby_keys        r   Úfood_types_for_scanrw   t   sa   € ô !3Ô 4Ó5Ñ 4˜1ˆa�e‰e�Q‰hÐ 4€FÐ5ÙØ�w‘Ð Ð ÙØ�|Ñ$Ð%Ð%ÙØ�yÑ!Ð"Ð"Ø€Iùò 6s   �=c                   óŽ   — e Zd ZU ee   ed<   ee   ed<   ee   ed<   ee   ed<   eed<   eed<   eed<    e	e
¬«      Zee   ed	<   y
)ÚFoodScanResponseÚidentified_ingredientsÚharmful_ingredientsÚneutral_ingredientsÚsafe_ingredientsÚwarning_messageÚneutral_messageÚsafe_message)r-   Ú
food_typesN)r    r!   r"   r   r#   r$   r\   r`   rc   r   Úlistr�   re   r   r   r   ry   ry   ˆ   sU   … Ø  ™IÓ%ØÐ/Ñ0Ó0ØÐ/Ñ0Ó0Ø˜>Ñ*Ó*ØÓØÓØÓá%*¸4Ô%@€J��\Ñ"Ô@r   ry   c                   ó^   — e Zd ZU eed<   dZee   ed<   eed<   e	ed<   dZ
eeeef      ed<   y)ÚDailyNutritionResponser;   NÚcalculation_timestampr>   r?   rI   )r    r!   r"   r#   r$   r…   r   r   r8   r&   rI   r   r   r   r   r„   r„   “   s;   … ØƒLØ04Ð˜8 HÑ-Ó4ØÓØ .Ó.Ø:>Ð˜x¨¨S°#¨X©Ñ7Ô>r   r„   )"ÚosÚreÚjsonr   Útypingr   r   r   Úpydanticr   r   Úpypdfr   r   Ú	tracebackr#   r   r   r&   r,   r:   rK   rQ   rW   rY   r\   r`   rc   re   rp   Úboolrw   ry   r„   r   r   r   Ú<module>rŽ      s,  ðÛ 	Û 	Û Ý ß 'Ñ 'ß %Û Û Û Û ð
P˜#ó PôV�ô Vô
�Yô ô

 ˆ9ô 
 ô?�yô ?ô"	&�iô 	&ô�yô ô"�yô "ô,˜	ô ,ô˜	ô ô
˜	ô ô�Yô ô�9ô ð˜D Ñ.ó ð !ØØò	àðð ðð ð	ð
 
ˆ,Ñóô(	A�yô 	Aô?˜Yõ ?r   