"""GET /api/v1/ttp/techniques — distinct techniques observed fleet-wide.

Returns an empty list at contract phase (E.1.9). Repo wiring lands in
E.1.10 / E.3 implementation; the response shape is stable from here.
"""
from __future__ import annotations

from typing import Any

from fastapi import APIRouter, Depends

from decnet.telemetry import traced as _traced
from decnet.web.db.models import TechniqueRollupRow
from decnet.web.dependencies import repo, require_viewer

router = APIRouter()


@router.get(
    "/ttp/techniques",
    tags=["TTP Tagging"],
    response_model=list[TechniqueRollupRow],
    responses={
        401: {"description": "Could not validate credentials"},
        403: {"description": "Insufficient permissions"},
    },
)
@_traced("api.ttp.list_techniques")
async def api_list_techniques(
    user: dict[str, Any] = Depends(require_viewer),
) -> list[TechniqueRollupRow]:
    """Distinct techniques observed across the fleet, with counts and
    last-seen timestamps."""
    return await repo.list_distinct_techniques()
