from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from app.database import get_db
from app.models import HomePantry, Ingredient, FamilyProfile
from app.schemas import HomePantryResponse, HomePantryCreate
from app.security import require_session
from uuid import UUID
from typing import List

router = APIRouter()


@router.get("", response_model=List[HomePantryResponse])
def get_pantry_items(db: Session = Depends(get_db)):
    profile = db.query(FamilyProfile).first()
    if not profile:
        raise HTTPException(status_code=404, detail="Family profile not found")

    items = db.query(HomePantry).filter(
        HomePantry.family_profile_id == profile.id
    ).all()
    return items


@router.post("", response_model=HomePantryResponse, dependencies=[Depends(require_session)])
def add_pantry_item(item: HomePantryCreate, db: Session = Depends(get_db)):
    profile = db.query(FamilyProfile).first()
    if not profile:
        raise HTTPException(status_code=404, detail="Family profile not found")

    existing = db.query(HomePantry).filter(
        HomePantry.family_profile_id == profile.id,
        HomePantry.ingredient_id == item.ingredient_id
    ).first()

    if existing:
        existing.quantity = item.quantity
        existing.unit = item.unit
        existing.expires_at = item.expires_at
        db.commit()
        db.refresh(existing)
        return existing

    db_item = HomePantry(
        family_profile_id=profile.id,
        ingredient_id=item.ingredient_id,
        quantity=item.quantity,
        unit=item.unit,
        expires_at=item.expires_at
    )

    db.add(db_item)
    db.commit()
    db.refresh(db_item)
    return db_item


@router.delete("/{item_id}", dependencies=[Depends(require_session)])
def remove_pantry_item(item_id: UUID, db: Session = Depends(get_db)):
    item = db.query(HomePantry).filter(HomePantry.id == item_id).first()
    if not item:
        raise HTTPException(status_code=404, detail="Pantry item not found")

    db.delete(item)
    db.commit()
    return {"message": "Pantry item removed"}


@router.put("/{item_id}", response_model=HomePantryResponse, dependencies=[Depends(require_session)])
def update_pantry_item(item_id: UUID, update: HomePantryCreate, db: Session = Depends(get_db)):
    item = db.query(HomePantry).filter(HomePantry.id == item_id).first()
    if not item:
        raise HTTPException(status_code=404, detail="Pantry item not found")

    item.ingredient_id = update.ingredient_id
    item.quantity = update.quantity
    item.unit = update.unit
    item.expires_at = update.expires_at

    db.commit()
    db.refresh(item)
    return item