import { BaseDTO } from "../base"
/**
 * Dify文件信息（用于对话文件上传和请求）
 */
export interface DifyFileInfo {
    /** 文件ID（Dify返回） */
    id?: string
    /** 文件名 */
    name?: string
    /** 文件大小（字节） */
    size?: number
    /** 文件扩展名 */
    extension?: string
    /** 文件MIME类型 */
    mime_type?: string
    /** 上传人ID */
    created_by?: string
    /** 上传时间（时间戳） */
    created_at?: number
    /** 预览URL */
    preview_url?: string
    /** 源文件URL */
    source_url?: string
    /** 文件类型：image、document、audio、video、file */
    type?: string
    /** 传输方式：remote_url、local_file */
    transfer_method?: string
    /** 文件URL或ID */
    url?: string
    /** 本地文件上传ID */
    upload_file_id?: string
    /** 系统文件ID */
    sys_file_id?: string
    /** 文件路径（从系统文件表获取） */
    file_path?: string
}

/**
 * AI智能体对话
 */
export interface TbChat extends BaseDTO {
    /** 对话ID */
    chatId?: string
    /** 智能体ID */
    agentId?: string
    /** 用户ID */
    userId?: string
    /** 用户类型 true-系统内部人员 false-系统外部人员 */
    userType?: boolean
    /** 对话标题 */
    title?: string
}

/**
 * AI智能体对话消息
 */
export interface TbChatMessage extends BaseDTO {
    /** 消息ID */
    messageId?: string
    /** Dify消息ID */
    difyMessageId?: string
    /** 对话ID */
    chatId?: string
    /** 角色 */
    role?: string
    /** 内容 */
    content?: string
    /** 文件ID数组 */
    files?: string[]
    /** 评价 */
    comment?: string
}

/**
 * 对话消息数据预处理对象
 */
export interface ChatPrepareData {
    /** 智能体Id */
    agentId?: string
    /** 对话Id */
    chatId?: string
    /** 用户问题 */
    query?: string
    /** 本次对话携带的dify文件对象 */
    files?: DifyFileInfo[]
    /** 用户ID（来客传wechatId，员工传userId） */
    userId?: string
    /** 用户类型（false=来客，true=员工） */
    userType?: boolean
    service?: string
}

/**
 * 停止对话参数
 */
export interface StopChatParams {
    taskId: string
    agentId: string
    userId: string
}

/**
 * 评价消息参数
 */
export interface CommentMessageParams {
    agentId: string
    chatId: string
    messageId: string
    comment: string
    userId: string
}

// ==================== 请求参数类型（必传校验） ====================

/**
 * 创建对话参数
 */
export interface CreateChatParam {
    /** 智能体ID（必传） */
    agentId: string
    /** 用户ID（必传） */
    userId: string
    /** 用户类型 */
    userType: boolean
    /** 对话标题 */
    title?: string
}


/**
 * 停止对话参数
 */
export interface StopChatParam {
    /** 任务ID（必传） */
    taskId: string
    /** 智能体ID（必传） */
    agentId: string
    /** 用户ID（必传） */
    userId: string
}

/**
 * 评价消息参数
 */
export interface CommentMessageParam {
    /** 智能体ID（必传） */
    agentId: string
    /** 对话ID（必传） */
    chatId: string
    /** 消息ID（必传） */
    messageId: string
    /** 评价内容（必传） */
    comment: string
    /** 用户ID（必传） */
    userId: string
}

/**
 * 查询对话列表参数
 */
export interface ChatListParam {
    /** 用户ID（必传） */
    userId: string
    /** 智能体ID */
    agentId?: string
}

/**
 * 查询对话消息列表参数
 */
export interface ChatMessageListParam {
    /** 对话ID（必传） */
    chatId: string
}

// ==================== SSE 流式对话类型 ====================

/**
 * SSE 消息事件数据
 */
export interface SSEMessageData {
    /** 事件类型 */
    event?: string
    /** 回答内容 */
    answer?: string
    /** 任务ID */
    task_id?: string
    /** 错误消息 */
    message?: string
}

/**
 * SSE 回调函数
 */
export interface SSECallbacks {
    /** 收到消息 */
    onMessage?: (data: SSEMessageData) => void
    /** 消息结束 */
    onEnd?: (taskId: string) => void
    /** 发生错误 */
    onError?: (error: string) => void
    /** 请求完成（无论成功失败） */
    onComplete?: () => void
}

/**
 * SSE 请求任务对象
 */
export interface SSETask {
    /** 停止请求 */
    abort: () => void
}