/**
 * 消息类型枚举（对应 LangChain4j 格式）
 */
export enum MessageType {
  SYSTEM = "SYSTEM",
  USER = "USER",
  AI = "AI",
  TOOL_EXECUTION_RESULT = "TOOL_EXECUTION_RESULT",
  COMPACTION_SUMMARY = "COMPACTION_SUMMARY"  // 压缩摘要
}

/**
 * 工具执行请求
 */
export interface ToolExecutionRequest {
  id: string;
  name: string;
  arguments: string; // JSON字符串
}

/**
 * 消息内容（用于USER消息）
 */
export interface MessageContent {
  type: "TEXT";
  text: string;
}

/**
 * 基础消息接口
 */
export interface BaseMessage {
  type: MessageType;
}

/**
 * 系统消息
 */
export interface SystemMessage extends BaseMessage {
  type: MessageType.SYSTEM;
  text: string;
}

/**
 * 用户消息
 */
export interface UserMessage extends BaseMessage {
  type: MessageType.USER;
  contents: MessageContent[];
}

/**
 * AI消息
 */
export interface AiMessage extends BaseMessage {
  type: MessageType.AI;
  text?: string;
  toolExecutionRequests?: ToolExecutionRequest[];
  thinking?: string;
  segments?: any[]; // 保存完整的 segments 信息用于还原显示
}

/**
 * 工具执行结果消息
 */
export interface ToolExecutionResultMessage extends BaseMessage {
  type: MessageType.TOOL_EXECUTION_RESULT;
  id: string;
  toolName: string;
  text: string; // JSON字符串
}

/**
 * 压缩摘要消息
 */
export interface CompactionSummaryMessage extends BaseMessage {
  type: MessageType.COMPACTION_SUMMARY;
  summary: string;
  version: number;
  compactedAt: string;
  originalMessageCount: number;
  compactedMessageCount: number;
}

/**
 * 联合消息类型
 */
export type ChatMessage = SystemMessage | UserMessage | AiMessage | ToolExecutionResultMessage | CompactionSummaryMessage;

/**
 * 对话轮次元数据
 */
export interface ConversationMeta {
  turnId: number;
  timestamp: string; // ISO 8601格式
  usage?: {
    inputTokens?: number;
    outputTokens?: number;
    totalTokens?: number;
  };
  model?: string;
  duration?: number; // 响应耗时（秒）
}

/**
 * 任务元数据（meta.json）
 */
export interface TaskMeta {
  taskId: string;
  taskName: string;
  projectPath: string;
  createdAt: string; // ISO 8601格式
  updatedAt: string; // ISO 8601格式
  stats: {
    credits: number;
    totalTokens: number;
    inputTokens: number;
    outputTokens: number;
  };
}

/**
 * 任务会话（包含所有相关数据）
 */
export interface TaskSession {
  meta: TaskMeta;
  messages: ChatMessage[]; // conversation.json的内容
  conversationMeta: ConversationMeta[]; // conversation_meta.jsonl的内容
}
