"""Years routes: /api/years CRUD.

Thin + sync per standards; behavior lives in services/years.py.
"""
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.years import OkResult, YearCreate, YearDetail, YearOut, YearPatch
from ..services import years

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


@router.get("/years", response_model=list[YearOut])
def year_list(
    archived: int = Query(0),
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
):
    return years.list_years(db, garden_id, include_archived=bool(archived))


@router.post("/years", response_model=YearOut, status_code=201)
def year_create(
    body: YearCreate,
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
):
    return years.create_year(db, garden_id, year=body.year, notes=body.notes)


@router.get("/years/{year_id}", response_model=YearDetail)
def year_detail(
    year_id: int,
    archived: int = Query(0),
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
):
    return years.get_year(db, garden_id, year_id, include_archived=bool(archived))


@router.patch("/years/{year_id}", response_model=YearOut)
def year_update(
    year_id: int,
    body: YearPatch,
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
):
    return years.update_year(
        db, garden_id, year_id, body.model_dump(exclude_unset=True)
    )


@router.delete("/years/{year_id}", response_model=OkResult)
def year_delete(
    year_id: int,
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
):
    years.delete_year(db, garden_id, year_id)
    return OkResult()
