import { readFileSync, existsSync } from "node:fs";
import { join } from "node:path";
import { homedir } from "node:os";

const SNAPSHOT_PATH = join(homedir(), ".fewtok", "statusline.json");

const LABELS: Record<string, string> = {
  "fewtok-core": "FT",
  "context-mode": "CTXMD",
  "rtk": "RTK",
};

function fmt(tokens: number): string {
  if (tokens >= 1_000_000) return `${Math.round(tokens / 1_000_000)}M`;
  if (tokens >= 1_000) return `${Math.round(tokens / 1_000)}K`;
  return String(tokens);
}

export function cmdStatusline(): number {
  if (!existsSync(SNAPSHOT_PATH)) { console.log(""); return 0; }
  let snap: { counters: Record<string, { tokensIn: number; tokensOut: number; hits: number }> };
  try { snap = JSON.parse(readFileSync(SNAPSHOT_PATH, "utf-8")); } catch { console.log(""); return 0; }

  const segments: string[] = [];
  let total = 0;
  const ordered = Object.entries(snap.counters)
    .filter(([, c]) => (c.tokensIn - c.tokensOut) > 0)
    .sort(([a], [b]) => {
      if (a === "fewtok-core") return -1;
      if (b === "fewtok-core") return 1;
      return (snap.counters[b]!.hits) - (snap.counters[a]!.hits);
    });

  for (const [id, c] of ordered) {
    const saved = c.tokensIn - c.tokensOut;
    if (saved <= 0) continue;
    total += saved;
    const label = LABELS[id] ?? id.toUpperCase();
    segments.push(`${label}:${fmt(saved)}`);
  }

  if (segments.length === 0) { console.log(""); return 0; }
  segments.push(`TOTAL:${fmt(total)}`);
  console.log(`[${segments.join("|")}]`);
  return 0;
}
