"""Antigravity (`agy`) CLI usage collector.

공식 headless 문서는 ``--output-format json`` / ``stream-json`` 의 최종
``usage`` 객체에 토큰을 둔다. okstra 는 이미 ``stream-json`` 으로 호출하고
그 줄을 워커 로그에 남긴다. 정본은 마지막 ``result.usage`` 이다.
"""
from __future__ import annotations

from pathlib import Path

from .jsonl_io import iter_jsonl


def antigravity_session_total(json_path: Path) -> dict:
    """stream-json 로그에서 마지막 result.usage 를 읽는다."""
    result_usage: dict | None = None
    step_usage: dict | None = None
    model: str | None = None
    for record in iter_jsonl(json_path):
        kind = record.get("event")
        if kind == "init":
            init = record.get("init")
            if isinstance(init, dict) and isinstance(init.get("model"), str):
                model = init["model"]
            continue
        if kind == "result":
            result = record.get("result")
            if isinstance(result, dict) and isinstance(result.get("usage"), dict):
                result_usage = result["usage"]
            continue
        if kind == "step_update":
            step = record.get("step_update")
            if isinstance(step, dict) and isinstance(step.get("usage"), dict):
                step_usage = step["usage"]
    usage = result_usage or step_usage
    if usage is None:
        return {"totalTokens": 0, "available": False}
    return {
        "totalTokens": usage.get("total_tokens", 0) or 0,
        "inputTokens": usage.get("input_tokens", 0) or 0,
        "outputTokens": usage.get("output_tokens", 0) or 0,
        "thoughtsTokens": usage.get("thinking_tokens", 0) or 0,
        "cacheReadTokens": usage.get("cache_read_tokens", 0) or 0,
        "model": model,
        "available": True,
    }


def find_antigravity_session(project_root: Path, started_at: str, ended_at: str) -> Path | None:
    sessions = find_antigravity_sessions(project_root, started_at, ended_at)
    return sessions[-1] if sessions else None


def find_antigravity_sessions(project_root: Path, started_at: str, ended_at: str) -> list[Path]:
    # 세션 파일은 홈 디렉터리가 아니라 워커 로그다. 경로는 호출부가 prompt 에서 붙인다.
    return []
