export type TokenizerId = "claude-3" | "o200k_base" | string;

export interface UsageBlock {
  input_tokens: number;
  output_tokens: number;
  cache_creation_input_tokens?: number;
  cache_read_input_tokens?: number;
  ephemeral_5m_input_tokens?: number;
  ephemeral_1h_input_tokens?: number;
}

export interface NormalizedMessage {
  role: "user" | "assistant" | "system" | "tool";
  content: string;
}

export interface HintSurfaceRef {
  kind: "claude-md" | "agents-md";
}

export interface ProviderAdapter {
  readonly id: string;
  readonly tokenizerId: TokenizerId;
  readonly hintSurface: HintSurfaceRef;
  matches(req: Request): boolean;
  extractMessages(reqBody: unknown): NormalizedMessage[];
  replaceMessages(reqBody: unknown, messages: NormalizedMessage[]): unknown;
  readUsageFromSse(eventName: string, dataJson: unknown): UsageBlock | null;
}
