// SDKMessage —— Agent QueryEngine 主循环吐出的流式消息类型
//
// PR0.5 阶段只有最小骨架，后续 PR 按需扩展：
//   PR1   — 加 user_prompt / assistant_text / turn_done 三类
//   PR2   — 加 model_routing 元数据字段
//   PR3+  — 加 tool_use / tool_result / a2ui_component
//
// 字段命名遵循 CC 风格（snake_case 的 type，camelCase 的内部字段）。

import type { A2UIComponent } from "./a2ui.js";

export type MessageId = string;
export type SessionId = string;
export type TurnId = string;

export interface SDKMessageBase {
  readonly id: MessageId;
  readonly sessionId: SessionId;
  readonly turnId: TurnId;
  readonly createdAt: string;
}

export interface UserPromptMessage extends SDKMessageBase {
  readonly type: "user_prompt";
  readonly prompt: string;
}

export interface AssistantTextMessage extends SDKMessageBase {
  readonly type: "assistant_text";
  readonly text: string;
  readonly streaming?: boolean;
}

export interface ToolUseMessage extends SDKMessageBase {
  readonly type: "tool_use";
  readonly toolName: string;
  readonly input: unknown;
}

export interface ToolResultMessage extends SDKMessageBase {
  readonly type: "tool_result";
  readonly toolUseId: MessageId;
  readonly ok: boolean;
  readonly output?: unknown;
  readonly errorMessage?: string;
}

export interface A2UIComponentMessage extends SDKMessageBase {
  readonly type: "a2ui_component";
  readonly component: A2UIComponent;
}

export type StopReason = "end_turn" | "tool_use" | "max_tokens" | "user_abort" | "error";

export interface TurnDoneMessage extends SDKMessageBase {
  readonly type: "turn_done";
  readonly stopReason: StopReason;
}

export type SDKMessage =
  | UserPromptMessage
  | AssistantTextMessage
  | ToolUseMessage
  | ToolResultMessage
  | A2UIComponentMessage
  | TurnDoneMessage;
