"""Artifacts router — /api/artifacts (list grouped by kind, detail w/
rendered markdown, create, delete)."""
from __future__ import annotations

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 import artifacts as svc

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


class ArtifactCreate(BaseModel):
    kind: str
    title: str
    content_md: str
    notes: str = ""
    generated_at: str | None = None


class ArtifactOut(BaseModel):
    id: int
    kind: str
    title: str
    filename: str
    generated_at: str | None
    notes: str


class ArtifactListOut(BaseModel):
    artifacts: list[ArtifactOut]
    by_kind: dict[str, list[ArtifactOut]]
    kind_order: list[str]


class ArtifactDetailOut(ArtifactOut):
    content_md: str
    content_html: str


@router.get("", response_model=ArtifactListOut)
def list_artifacts(
    db: Session = Depends(get_db), garden_id: int = Depends(current_garden_id)
) -> dict:
    return svc.list_artifacts(db, garden_id)


@router.get("/{artifact_id}", response_model=ArtifactDetailOut)
def get_artifact(
    artifact_id: int,
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
) -> dict:
    return svc.get_artifact(db, garden_id, artifact_id)


@router.post("", status_code=201)
def create_artifact(
    body: ArtifactCreate,
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
) -> dict:
    out = svc.create_artifact(
        db, garden_id, kind=body.kind, title=body.title,
        content_md=body.content_md, notes=body.notes,
        generated_at=body.generated_at,
    )
    db.commit()
    return out


@router.delete("/{artifact_id}")
def delete_artifact(
    artifact_id: int,
    db: Session = Depends(get_db),
    garden_id: int = Depends(current_garden_id),
) -> dict:
    svc.delete_artifact(db, garden_id, artifact_id)
    db.commit()
    return {"ok": True}
