"""Inline click-to-edit route. Thin: validation, coercion, snapshotting,
species-combo enforcement, and audit all live in services/editable.py.

v1 equivalent: POST /api/edit/{entity}/{id} (main.py ≈7546-7685).
"""
from __future__ import annotations

from typing import Any

from fastapi import APIRouter, Depends
from pydantic import BaseModel
from sqlalchemy.orm import Session

from ..db import get_db
from ..deps import current_garden_id
from ..services.editable import edit_field

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


class EditFieldBody(BaseModel):
    """``{"field": "name", "value": ...}`` — value's type depends on the
    field spec (text/int/float/select/fk); the service coerces + validates."""

    field: str
    value: Any = None


@router.post("/edit/{entity_type}/{entity_id}")
def edit_entity_field(
    entity_type: str,
    entity_id: int,
    body: EditFieldBody,
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
) -> dict:
    """Generic per-field click-to-edit endpoint. Returns
    ``{"ok": true, "value": <stored>, "side_effects": {...}}``."""
    result = edit_field(
        db, garden_id, entity_type, entity_id, body.field.strip(), body.value
    )
    db.commit()
    return result
