from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from sqlalchemy.orm import Session
from .models import MealPlan, MealDay, Meal, MealFood, Food
from .utils import calculate_macros_for_mealplan, calculate_macros_for_day

def export_mealplan_pdf(session: Session, mealplan_id: int, show_macros: dict, filename: str):
    mealplan = session.query(MealPlan).filter(MealPlan.id == mealplan_id).first()
    days = session.query(MealDay).filter(MealDay.mealplan_id == mealplan_id).all()
    c = canvas.Canvas(filename, pagesize=A4)
    width, height = A4
    y = height - 40
    c.setFont("Helvetica-Bold", 16)
    c.drawString(40, y, f"Meal Plan: {mealplan.name}")
    y -= 30
    c.setFont("Helvetica", 12)
    for day in days:
        c.drawString(40, y, f"{day.day_of_week}")
        y -= 20
        meals = session.query(Meal).filter(Meal.mealday_id == day.id).all()
        for meal in meals:
            c.drawString(60, y, f"{meal.name}")
            y -= 15
            mealfoods = session.query(MealFood).filter(MealFood.meal_id == meal.id).all()
            for mf in mealfoods:
                food = session.query(Food).filter(Food.id == mf.food_id).first()
                c.drawString(80, y, f"{food.name}: {mf.quantity}g")
                y -= 12
        if show_macros.get("day", False):
            macros = calculate_macros_for_day(session, day.id)
            c.drawString(60, y, f"Macros: Cal {macros['calories']:.1f} F {macros['fats']:.1f} P {macros['proteins']:.1f} C {macros['carbs']:.1f}")
            y -= 15
        y -= 10
    if show_macros.get("total", False):
        macros = calculate_macros_for_mealplan(session, mealplan_id)
        c.drawString(40, y, f"Totale settimana: Cal {macros['calories']:.1f} F {macros['fats']:.1f} P {macros['proteins']:.1f} C {macros['carbs']:.1f}")
    c.save()
