from sqlalchemy.orm import Session
from .models import MealDay, Meal, MealFood, Food

def calculate_macros_for_meal(session: Session, meal_id: int):
    macros = {"calories": 0, "fats": 0, "proteins": 0, "carbs": 0}
    foods = session.query(MealFood).filter(MealFood.meal_id == meal_id).all()
    for mf in foods:
        food = session.query(Food).filter(Food.id == mf.food_id).first()
        factor = mf.quantity / 100.0
        macros["calories"] += food.calories * factor
        macros["fats"] += food.fats * factor
        macros["proteins"] += food.proteins * factor
        macros["carbs"] += food.carbs * factor
    return macros

def calculate_macros_for_day(session: Session, mealday_id: int):
    macros = {"calories": 0, "fats": 0, "proteins": 0, "carbs": 0}
    meals = session.query(Meal).filter(Meal.mealday_id == mealday_id).all()
    for meal in meals:
        meal_macros = calculate_macros_for_meal(session, meal.id)
        for k in macros:
            macros[k] += meal_macros[k]
    return macros

def calculate_macros_for_mealplan(session: Session, mealplan_id: int):
    macros = {"calories": 0, "fats": 0, "proteins": 0, "carbs": 0}
    days = session.query(MealDay).filter(MealDay.mealplan_id == mealplan_id).all()
    for day in days:
        day_macros = calculate_macros_for_day(session, day.id)
        for k in macros:
            macros[k] += day_macros[k]
    return macros
