namespace OASystem.API.OAMethodLib.DeepSeekAPI
{
    /// 
    /// DeepSeek API 服务接口
    /// 
    public interface IDeepSeekService
    {
        /// 
        /// 测试API连通性
        /// 
        /// 
        Task TestApiConnectivityAsync();
        /// 
        /// 检查可用端点
        /// 
        /// 
        Task> DiscoverAvailableEndpointsAsync();
        /// 
        /// 上传文件到DeepSeek API
        /// 
        /// 要上传的文件
        /// 文件用途
        /// 文件上传响应
        Task UploadFileAsync(IFormFile file, string purpose = "assistants");
        /// 
        /// 批量上传文件
        /// 
        /// 文件列表
        /// 文件用途
        /// 上传结果列表
        Task> UploadFilesAsync(List files, string purpose = "assistants");
        /// 
        /// 获取文件列表
        /// 
        /// 文件列表响应
        Task ListFilesAsync();
        /// 
        /// 获取文件信息
        /// 
        /// 文件ID
        /// 文件信息
        Task GetFileInfoAsync(string fileId);
        /// 
        /// 删除文件
        /// 
        /// 文件ID
        /// 是否删除成功
        Task DeleteFileAsync(string fileId);
        /// 
        /// 使用已上传的文件进行聊天
        /// 
        /// 文件ID列表
        /// 问题
        /// 模型名称
        /// 温度参数
        /// 最大token数
        /// 聊天响应
        Task ChatWithFilesAsync(List fileIds, string question, string model = "deepseek-chat", float temperature = 0.7f, int maxTokens = 4000);
        /// 
        /// 等待文件处理完成
        /// 
        /// 文件ID
        /// 超时时间(秒)
        /// 处理后的文件状态
        Task WaitForFileProcessingAsync(string fileId, int timeoutSeconds = 60);
        #region 本地项目相关
        /// 
        /// 读取项目内的指定文件并转换为IFormFile
        /// 
        /// 文件相对路径列表
        /// 文件读取响应
        Task ReadProjectFilesAsync(List relativePaths);
        /// 
        /// 读取项目内指定目录的文件
        /// 
        /// 目录相对路径
        /// 文件搜索模式
        /// 是否递归搜索
        /// 文件读取响应
        Task ReadProjectDirectoryAsync(string directoryPath, string searchPattern = "*.cs", bool recursive = false);
        /// 
        /// 获取项目根目录路径
        /// 
        /// 项目根目录完整路径
        string GetProjectRootPath();
        /// 
        /// 检查文件是否存在
        /// 
        /// 文件相对路径
        /// 是否存在
        bool FileExists(string relativePath);
        /// 
        /// 将物理文件转换为IFormFile
        /// 
        /// 文件完整路径
        /// IFormFile实例
        Task ConvertToFormFileAsync(string filePath);
        /// 
        /// 读取特定的签证申请表单文件
        /// 
        /// 
        /// 
        Task ReadVisaFormFileAsync(string fileName);
        /// 
        /// 读取OASystem项目中的所有CS文件
        /// 
        Task ReadOASystemFilesAsync(string searchPattern = "*.cs", bool recursive = true);
        /// 
        /// 读取指定域模型中的CS文件
        /// 
        Task ReadDomainViewModelsAsync(string searchPattern = "*.cs", bool recursive = true);
        /// 
        /// 读取签证表单相关的所有CS文件
        /// 
        Task ReadVisaFormFilesAsync(string searchPattern = "*.cs", bool recursive = true);
        #endregion
    }
}