"""/api/timeline — global + per-entity feeds, activity log, overview history.

Port of v1 global_timeline / entity_timeline / overview_history
(main.py:6924-7151) as JSON feeds. Thin: all behavior in
services/timeline.py.

Query params mirror v1: ``view`` is ``notes`` (comment rows with media +
target chips) or ``log`` (activity_log entries); ``children``/``related``
expand a scoped feed; ``archived=1`` reveals archived rows.
"""
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.notes import EntityTimelineOut, OverviewHistoryOut, TimelineOut
from ..services import timeline as timeline_svc

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


@router.get("", response_model=TimelineOut)
def global_timeline(
    scope_type: str | None = None,
    scope_id: int | None = None,
    children: int | None = None,
    related: int = 0,
    archived: int = Query(0),
    view: str = Query("notes"),
    garden_id: int = Depends(current_garden_id),
    db: Session = Depends(get_db),
) -> dict:
    return timeline_svc.global_feed(
        db,
        garden_id,
        scope_type=scope_type,
        scope_id=scope_id,
        children=None if children is None else bool(children),
        related=bool(related),
        archived=bool(archived),
        view=view,
    )


# Literal path before the parameterized one.
@router.get(
    "/overview-history/{entity_type}/{entity_id}",
    response_model=OverviewHistoryOut,
)
def overview_history(
    entity_type: str,
    entity_id: int,
    garden_id: int = Depends(current_garden_id),
    db: Session = Depends(get_db),
) -> dict:
    return timeline_svc.overview_history(db, garden_id, entity_type, entity_id)


@router.get("/{entity_type}/{entity_id}", response_model=EntityTimelineOut)
def entity_timeline(
    entity_type: str,
    entity_id: int,
    archived: int = Query(0),
    view: str = Query("notes"),
    garden_id: int = Depends(current_garden_id),
    db: Session = Depends(get_db),
) -> dict:
    return timeline_svc.entity_feed(
        db, garden_id, entity_type, entity_id, archived=bool(archived), view=view
    )
