from pydantic import BaseModel, Field, ConfigDict
from typing import Dict,List,Optional,Literal,Any

class MetricResult(BaseModel):
    title:str
    status: str
    tip: str = Field(alias="tip")
    score : Optional[Any] = None

class LLMResponse(BaseModel):
    model_config = ConfigDict(populate_by_name=True)
    Data: List[MetricResult]

class wellnessScore(BaseModel):
    heart_rate: Optional[float] = None                     
    breathing_rate: Optional[float] = None                 
    oxygen_saturation: Optional[float] = None              
    blood_pressure: Optional[str] = None                   # e.g., "118/81"
    stress_level: Optional[str] = None                     # "Low", "Normal", "Mild", "High", "Very High"
    heart_variability: Optional[float] = None              
    prq: Optional[float] = None                           
    activity: Optional[int] = None                         
    sleep: Optional[int] = None                            
    equilibrium: Optional[int] = None                      
    metabolism: Optional[int] = None                      
    relaxation: Optional[int] = None                       
    cardiovascular_age: Optional[int] = None               
    hemoglobin: Optional[float] = None                     
    cholesterol: Optional[float] = None                    
    a1c_risk: Optional[float] = None
    cholesterol_risk: Optional[int] = None                 
    a1c_range: Optional[str] = None                        # e.g., "5.34 - 6.16"
    cholesterol_range: Optional[str] = None                # "Normal", "Borderline High", "High", "Invalid"
    wellness_score: int                                    # Mandatory wellness score input
    atrial_fibrillation: Optional[Literal["NSR", "AFib", "Failed"]] = None
    hba1c: Optional[float] = None
    cardiovascular_bmi: Optional[float] = None
                          

class uvfScore(BaseModel):
    urobilinogen: Optional[float] = None         
    bilirubin: Optional[float] = None            
    ketones: Optional[float] = None             
    creatinine: Optional[float] = None           
    blood: Optional[float] = None                
    protein: Optional[float] = None             
    micro_albumin: Optional[float] = None        
    glucose: Optional[float] = None              
    specific_gravity: Optional[float] = None     
    ph: Optional[float] = None                   
    ascorbate: Optional[float] = None            
    calcium: Optional[float] = None

