"""Plantings router — thin sync handlers over services/plantings.py.

Routes (all behind the default-deny AuthMiddleware):
- GET    /api/plantings              list, grouped by year, with counts
- POST   /api/plantings              create (inline plant rows supported)
- GET    /api/plantings/{id}         detail (plants + totals)
- PATCH  /api/plantings/{id}         partial update (plants array = full set)
- DELETE /api/plantings/{id}         delete (v1 cascade semantics)
- POST   /api/plantings/{id}/plants  add one plant group
"""
from __future__ import annotations

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

from ..db import get_db
from ..deps import current_garden_id
from ..schemas.plantings import (
    OkOut,
    PlantingCreate,
    PlantingDetailOut,
    PlantingListOut,
    PlantingUpdate,
    PlantOut,
    PlantRowIn,
)
from ..services import plantings as svc

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


@router.get("", response_model=PlantingListOut)
def list_plantings(
    archived: int = Query(0),
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
):
    return svc.list_plantings(db, garden_id, include_archived=bool(archived))


@router.post("", response_model=PlantingDetailOut, status_code=201)
def create_planting(
    payload: PlantingCreate,
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
):
    result = svc.create_planting(db, garden_id, payload)
    db.commit()
    return result


@router.get("/{planting_id}", response_model=PlantingDetailOut)
def get_planting(
    planting_id: int,
    archived: int = Query(0),
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
):
    return svc.get_planting(db, garden_id, planting_id, include_archived=bool(archived))


@router.patch("/{planting_id}", response_model=PlantingDetailOut)
def update_planting(
    planting_id: int,
    payload: PlantingUpdate,
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
):
    result = svc.update_planting(db, garden_id, planting_id, payload)
    db.commit()
    return result


@router.delete("/{planting_id}", response_model=OkOut)
def delete_planting(
    planting_id: int,
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
):
    result = svc.delete_planting(db, garden_id, planting_id)
    db.commit()
    return result


@router.post("/{planting_id}/plants", response_model=PlantOut, status_code=201)
def add_plant_to_planting(
    planting_id: int,
    payload: PlantRowIn,
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
):
    result = svc.add_plant_to_planting(db, garden_id, planting_id, payload)
    db.commit()
    return result
