o
    ÔÍŽjÇ  ã                
   @   s”  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d„ZG dd	„ d	e	ƒZG d
d„ de	ƒZG dd„ de	ƒZG dd„ de	ƒZG dd„ de	ƒZG dd„ de	ƒZG dd„ de	ƒZG dd„ de	ƒZG dd„ de	ƒZG dd„ de	ƒZG dd„ de	ƒZG dd„ de	ƒZdee fd d!„Zd"d"d"d#œd$ed%ed&edee fd'd(„ZG d)d*„ d*e	ƒZ G d+d,„ d,e	ƒZ!dS )-é    N)Údatetime)ÚDictÚListÚOptional)Ú	BaseModelÚFieldÚreturnc                   C   s   d  tjtjtj dd�¡S )z7Generate a 5-character alphanumeric ID (e.g., 'A3F9B').Ú é   )Úk)ÚjoinÚrandomÚchoicesÚstringÚascii_uppercaseÚdigits© r   r   úU/home/esfera/Desktop/Rishu/fitness/Fitness-lenito-AI-main/fitness_app/data_manager.pyÚgenerate_meal_id   s   r   c                   @   sB   e Zd ZU eed< eddd�Zee ed< eddd�Zeed< d	S )
Ú
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   
 r   c                   @   ó&   e Zd ZU eed< eed< eed< dS )ÚMacronutrientsÚcarbohydratesÚproteinÚfatN)r   r   r   Úfloatr    r   r   r   r   r"      ó   
 r"   c                   @   sz   e Zd ZU eed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< dS )Ú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   r2   Úintr3   r   r   r   r   r   r(       s   
 r(   c                   @   sú   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< dS )Ú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    r9   r   r4   r:   r"   r   r   r(   r>   r?   r@   rA   rB   rC   rD   r   r   r   r   r5   ,   s    
 r5   c                   @   sn   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
< dS )ÚSwapMealRequestr6   r7   r8   r,   r-   Úcurrent_caloriesr	   ÚcountryÚ	allergiesÚfood_dislikesN)
r   r   r   r   r    r4   rG   r   rH   rI   r   r   r   r   rE   =   s   
 rE   c                   @   s2   e Zd ZU ee ed< eed< eed< eed< dS )ÚSwapMealResponseÚalternativesÚoriginal_categoryÚoriginal_sub_categoryÚtarget_caloriesN)r   r   r   r   r(   r    r   r4   r   r   r   r   rJ   H   s
   
 rJ   c                   @   s:   e Zd ZU dZee ed< eed< eed< ee ed< dS )ÚMealImageRequestNr*   r+   r   r0   )	r   r   r   r*   r   r   r    r   r   r   r   r   r   rO   N   s
   
 rO   c                   @   s.   e Zd ZU dZee ed< dZee ed< dS )ÚMealImageResponseNr*   Úmeal_image_base64)r   r   r   r*   r   r   r    rQ   r   r   r   r   rP   T   s   
 rP   c                   @   r!   )ÚHarmfulIngredientr   Úreasonr,   N©r   r   r   r   r    r   r   r   r   rR   X   r'   rR   c                   @   ó   e Zd ZU eed< dS )ÚNeutralIngredientr   NrT   r   r   r   r   rV   ]   ó   
 rV   c                   @   rU   )ÚSafeIngredientr   NrT   r   r   r   r   rX   a   rW   rX   c                   @   s*   e Zd ZU dZeed< eed< eed< dS )ÚFoodTypeInfozELegend entry for Beneficial / Neutral / Avoid in scan-food responses.ÚkeyÚtitler   N)r   r   r   Ú__doc__r   r    r   r   r   r   rY   d   s
   
 rY   c                   C   s(   t dddd�t dddd�t dd	d
d�gS )NÚ
beneficialÚ
BeneficialziFoods that are strongly aligned with your blood-type profile and are prioritised in your recommendations.)rZ   r[   r   ÚneutralÚNeutralznFoods that are compatible with your blood-type profile and can be enjoyed as part of your BloodFIT meal plans.ÚavoidÚAvoidzIFoods that BloodFIT recommends limiting based on your blood-type profile.)rY   r   r   r   r   Údefault_food_typesk   s    üüüïrc   F)Úhas_beneficialÚhas_neutralÚ	has_avoidrd   re   rf   c                 C   sN   dd„ t ƒ D ƒ}g }| r| |d ¡ |r| |d ¡ |r%| |d ¡ |S )u‚   
    Return every type that appears in this scan (Beneficial / Neutral / Avoid).
    Order: Beneficial â†’ Neutral â†’ Avoid.
    c                 S   s   i | ]}|j |“qS r   )rZ   )Ú.0Útr   r   r   Ú
<dictcomp>’   s    z'food_types_for_scan.<locals>.<dictcomp>r]   r_   ra   )rc   Úappend)rd   re   rf   Úby_keyÚselectedr   r   r   Úfood_types_for_scanˆ   s   
rm   c                   @   sl   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
d�Zee ed	< d
S )ÚFoodScanResponseÚidentified_ingredientsÚharmful_ingredientsÚneutral_ingredientsÚsafe_ingredientsÚwarning_messageÚneutral_messageÚsafe_message)r)   Ú
food_typesN)r   r   r   r   r   r    rR   rV   rX   r   Úlistrv   rY   r   r   r   r   rn   �   s   
 rn   c                   @   sN   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< dS )ÚDailyNutritionResponser6   NÚcalculation_timestampr9   r:   rD   )r   r   r   r   r    ry   r   r   r4   r"   rD   r   r   r   r   r   rx   ¨   s   
 rx   )"ÚosÚreÚjsonr   Útypingr   r   r   Úpydanticr   r   Úpypdfr   r   Ú	tracebackr   r   r   r"   r(   r5   rE   rJ   rO   rP   rR   rV   rX   rY   rc   Úboolrm   rn   rx   r   r   r   r   Ú<module>   sL    üþýü
û