/**
 * ChatBox 通用聊天组件类型定义
 * 适配：工作流对话、智能体对话、AI 对话
 */

// 消息角色
export type MessageRole = 'assistant' | 'system' | 'user';

// 消息状态
export type MessageStatus = 'completed' | 'failed' | 'pending' | 'streaming';

// 附件类型
export type AttachmentType = 'audio' | 'file' | 'image' | 'video';

// 附件 - 通过 file_id 关联文件管理系统
export interface Attachment {
  /** 文件管理系统中的文件 ID（新格式） */
  file_id?: string;
  /** 附件 ID（兼容旧格式，等同于 file_id） */
  id?: string;
  /** 附件类型 */
  type: AttachmentType;
  /** 文件名 */
  name?: string;
  /** 文件 URL（可选，用于预览） */
  url?: string;
  /** 文件大小 */
  size?: number;
  /** 缩略图 URL */
  thumbnail?: string;
  /** 音频时长 */
  duration?: number;
  /** 上传进度 */
  progress?: number;
  /** 上传状态 */
  status?: 'error' | 'success' | 'uploading';
}

// 推理步骤（智能体）
export interface ReasoningStep {
  type:
    | 'action'
    | 'annotation_reply'
    | 'knowledge_retrieval'
    | 'node_complete'
    | 'node_start'
    | 'observation'
    | 'thought'
    | 'tool_call'
    | 'tool_result';
  content: string;
  tool?: string;
  params?: Record<string, any>;
  result?: any;
  node_id?: string;
  node_type?: string;
  output?: any;
  /** 步骤状态：running 执行中，completed 已完成 */
  status?: 'completed' | 'running';
  timestamp?: string;
}

// 语音消息
export interface VoiceMessage {
  audioUrl: string;
  duration: number;
  /** 识别状态：transcribing 识别中，completed 已识别，failed 识别失败 */
  transcribeStatus?: 'completed' | 'failed' | 'transcribing';
  /** 识别出的文字 */
  transcribedText?: string;
}

// 对话流交互配置
export interface InteractionConfig {
  type: 'choice' | 'confirm' | 'question';
  // 问答输入
  question?: string;
  input_type?: string;
  placeholder?: string;
  default_value?: string;
  required?: boolean;
  render_input?: boolean;
  // 选项选择
  options?: Array<{ label: string; value: string }>;
  multiple?: boolean;
  min_select?: number;
  max_select?: number;
  // 确认操作
  title?: string;
  content?: string;
  confirm_text?: string;
  cancel_text?: string;
}

// 设计预览类型
export type DesignPreviewType =
  | 'agent_capability'
  | 'database_design'
  | 'knowledge_retrieval'
  | 'list_config'
  | 'llm_config'
  | 'system_summary'
  | 'workflow_result';

// 设计预览配置
export interface DesignPreview {
  /** 预览类型 */
  type: DesignPreviewType;
  /** 预览标题 */
  title: string;
  /** 预览数据 */
  data: Record<string, any>;
  /** 节点ID */
  nodeId: string;
  /** 是否可编辑 */
  editable?: boolean;
}

// 聊天消息
export interface ChatMessage {
  id: string;
  role: MessageRole;
  content: string;
  status?: MessageStatus;
  timestamp?: Date | string;
  attachments?: Attachment[];
  reasoning_steps?: ReasoningStep[];
  elapsed_time?: number;
  tokens_used?: number;
  error_message?: string;
  feedback?: 'dislike' | 'like' | null;
  model_name?: string;
  /** 语音消息 */
  voice?: VoiceMessage;
  /** 对话流交互配置（等待用户输入时） */
  interaction?: InteractionConfig;
}

// ChatBox Props
export interface ChatBoxProps {
  messages: ChatMessage[];
  loading?: boolean;
  streamingContent?: string;
  showAvatar?: boolean;
  userAvatar?: string;
  assistantAvatar?: string;
  assistantName?: string;
  placeholder?: string;
  disabled?: boolean;
  enableAttachment?: boolean;
  enableImage?: boolean;
  enableVoice?: boolean;
  enableFeedback?: boolean;
  enableRegenerate?: boolean;
  showReasoningSteps?: boolean;
  showClearButton?: boolean;
  emptyText?: string;
  maxFileSize?: number;
  // 欢迎消息配置
  welcomeConfig?: {
    description?: string;
    suggestions?: string[];
    title?: string;
  };
}
