from fastapi import APIRouter, HTTPException, status, Depends
from sqlalchemy.orm import Session
from database import SessionLocal
from models import MealPlan, Client, MealDay, Meal, MealFood, Food
from schemas import MealPlan as MealPlanSchema, MealPlanCreate

router = APIRouter(prefix="/mealplans", tags=["mealplans"])

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@router.get("/", response_model=list[MealPlanSchema])
def list_mealplans(db: Session = Depends(get_db)):
    return db.query(MealPlan).all()

@router.post("/", response_model=MealPlanSchema, status_code=status.HTTP_201_CREATED)
def create_mealplan(mealplan: MealPlanCreate, db: Session = Depends(get_db)):
    db_mp = MealPlan(**mealplan.dict())
    db.add(db_mp)
    db.commit()
    db.refresh(db_mp)
    return db_mp

@router.get("/{mealplan_id}", response_model=MealPlanSchema)
def get_mealplan(mealplan_id: int, db: Session = Depends(get_db)):
    mp = db.query(MealPlan).filter(MealPlan.id == mealplan_id).first()
    if not mp:
        raise HTTPException(status_code=404, detail="Meal Plan non trovato")
    return mp

@router.put("/{mealplan_id}", response_model=MealPlanSchema)
def update_mealplan(mealplan_id: int, mealplan: MealPlanCreate, db: Session = Depends(get_db)):
    db_mp = db.query(MealPlan).filter(MealPlan.id == mealplan_id).first()
    if not db_mp:
        raise HTTPException(status_code=404, detail="Meal Plan non trovato")
    for key, value in mealplan.dict().items():
        setattr(db_mp, key, value)
    db.commit()
    db.refresh(db_mp)
    return db_mp

@router.delete("/{mealplan_id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_mealplan(mealplan_id: int, db: Session = Depends(get_db)):
    db_mp = db.query(MealPlan).filter(MealPlan.id == mealplan_id).first()
    if not db_mp:
        raise HTTPException(status_code=404, detail="Meal Plan non trovato")
    db.delete(db_mp)
    db.commit()
    return None
