import uuid
from typing import List, Optional

from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session

from app.database import get_db
from app.models.plant import Plant, VarietyType
from app.schemas.plant import PlantCreate, PlantResponse

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


@router.get("", response_model=List[PlantResponse])
def list_plants(
    variety_type: Optional[VarietyType] = Query(None),
    db: Session = Depends(get_db),
):
    q = db.query(Plant)
    if variety_type is not None:
        q = q.filter(Plant.variety_type == variety_type)
    return q.order_by(Plant.name).all()


@router.get("/{plant_id}", response_model=PlantResponse)
def get_plant(plant_id: uuid.UUID, db: Session = Depends(get_db)):
    plant = db.query(Plant).filter(Plant.id == plant_id).first()
    if not plant:
        raise HTTPException(status_code=404, detail="Plant not found")
    return plant


@router.post("", response_model=PlantResponse, status_code=201)
def create_plant(payload: PlantCreate, db: Session = Depends(get_db)):
    plant = Plant(**payload.model_dump())
    db.add(plant)
    db.commit()
    db.refresh(plant)
    return plant
