export interface ParsedEvent {
  rawMessageId: string;
  tool: 'claude-code' | 'codex-cli';
  sessionId: string;
  projectPath: string;
  model: string;
  ts: string; // ISO
  inputTokens: number;
  outputTokens: number;
  cacheCreationTokens: number;
  cacheReadTokens: number;
  estimatedCostUsd: string;

  // 富 metadata 扩展（隐私安全：仅枚举 / 计数 / 路径 basename / 公开版本号，
  // 严禁包含 user/assistant 消息内容、tool 输入参数、tool 输出内容、session 标题等敏感信息）
  gitBranch?: string;
  agentVersionEvent?: string; // CLI 版本号（per-line，区别于设备级 agent_version）
  worktreeLabel?: string; // 从 cwd 推断的 worktree 名（slot-N / 命名 worktree / 主仓库 ""）
  cwdBasename?: string; // 真实 cwd 的 basename
  turnIndex?: number; // 本 session 内的 assistant turn 序号（1-based，由 watcher 注入）
  toolUseCount?: number; // 本 turn 的 tool_use 块计数
  toolNames?: string[]; // 本 turn 调用的 tool 名（去重，去参数）
  stopReason?: string; // end_turn / tool_use / stop_sequence / max_tokens 等
  serviceTier?: string; // standard / priority / batch
}

export interface PricingTable {
  version: string;
  models: PricingEntry[];
}
export interface PricingEntry {
  id: string;
  tool: string;
  inputUsdPerMTok: string;
  outputUsdPerMTok: string;
  cacheCreationUsdPerMTok: string;
  cacheReadUsdPerMTok: string;
}

export interface Parser {
  tool: 'claude-code' | 'codex-cli';
  parseLine(line: string, filePath: string, pricing: PricingTable | null): ParsedEvent | null;
}

/**
 * 从 cwd 推断 worktree label：
 *   /home/x/Code/ffworkspace-wt/<name>/...  → "<name>"
 *   /home/x/Code/<repo>-wt/.agent-pool/slot-N/... → "slot-N"
 *   /home/x/Code/workspace                  → ""（主仓库）
 *   其他                                    → cwd basename
 */
export function inferWorktreeLabel(cwd: string | undefined): string | undefined {
  if (!cwd) return undefined;
  const slotMatch = cwd.match(/\.agent-pool\/(slot-\d+)/);
  if (slotMatch) return slotMatch[1];
  const wtMatch = cwd.match(/[^/]+-wt\/([^/]+)/);
  if (wtMatch && wtMatch[1] !== '.agent-pool') return wtMatch[1];
  return undefined;
}
