/** * 视频编辑功能配置 */ import { getVideoEditApiConfig as getEnvVideoEditConfig, isDevelopment } from '@/lib/env'; export interface VideoEditApiConfig { /** 是否使用Mock API */ useMockApi: boolean; /** 是否使用本地API路由 */ useLocalApi: boolean; /** 远程API基础URL */ remoteApiBase: string; /** 本地API基础URL */ localApiBase: string; /** API超时时间(毫秒) */ timeout: number; /** 是否启用调试日志 */ enableDebugLog: boolean; } /** * 默认配置 */ export const defaultVideoEditApiConfig: VideoEditApiConfig = { useMockApi: true, // 优先使用Mock API确保前端功能独立 useLocalApi: true, // 备用本地API路由 remoteApiBase: '/video-edit', localApiBase: '/api/video-edit', timeout: 10000, enableDebugLog: isDevelopment }; /** * 获取当前API配置 */ export function getVideoEditApiConfig(): VideoEditApiConfig { // 从统一环境配置获取 const envConfig = getEnvVideoEditConfig(); return { ...defaultVideoEditApiConfig, useMockApi: envConfig.useMockApi, useLocalApi: !envConfig.useRemoteApi, remoteApiBase: envConfig.remoteApiBase, enableDebugLog: envConfig.enableDebugLog, }; } /** * 获取API端点URL */ export function getApiEndpoint(path: string): string { const config = getVideoEditApiConfig(); if (config.useMockApi) { return ''; // Mock API不需要真实端点 } if (config.useLocalApi) { return `${config.localApiBase}${path}`; } return `${config.remoteApiBase}${path}`; } /** * 调试日志函数 */ export function debugLog(message: string, data?: any): void { const config = getVideoEditApiConfig(); if (config.enableDebugLog) { console.log(`[VideoEdit] ${message}`, data || ''); } } /** * API状态检查 */ export async function checkApiHealth(): Promise<{ status: 'healthy' | 'unhealthy' | 'unknown'; message: string; responseTime?: number; }> { const config = getVideoEditApiConfig(); if (config.useMockApi) { return { status: 'healthy', message: 'Mock API is always healthy', responseTime: 0 }; } try { const startTime = Date.now(); const endpoint = getApiEndpoint('/health'); // 尝试健康检查端点 const response = await fetch(endpoint, { method: 'GET', timeout: config.timeout } as any); const responseTime = Date.now() - startTime; if (response.ok) { return { status: 'healthy', message: 'API is responding normally', responseTime }; } else { return { status: 'unhealthy', message: `API returned status ${response.status}`, responseTime }; } } catch (error) { return { status: 'unhealthy', message: error instanceof Error ? error.message : 'Unknown error', }; } } /** * 错误处理配置 */ export const errorHandlingConfig = { /** 最大重试次数 */ maxRetries: 3, /** 重试延迟(毫秒) */ retryDelay: 1000, /** 是否在API失败时自动回退到Mock */ fallbackToMock: true, /** 错误通知配置 */ notifications: { showNetworkErrors: true, showValidationErrors: true, showServerErrors: true } }; /** * 性能监控配置 */ export const performanceConfig = { /** 是否启用性能监控 */ enabled: isDevelopment, /** 慢请求阈值(毫秒) */ slowRequestThreshold: 2000, /** 是否记录所有请求 */ logAllRequests: false, /** 是否启用请求缓存 */ enableCaching: true, /** 缓存过期时间(毫秒) */ cacheExpiry: 5 * 60 * 1000 // 5分钟 }; /** * 功能开关配置 */ export const featureFlags = { /** 是否启用编辑点创建 */ enableCreateEditPoint: true, /** 是否启用编辑点更新 */ enableUpdateEditPoint: true, /** 是否启用编辑点删除 */ enableDeleteEditPoint: true, /** 是否启用批量操作 */ enableBatchOperations: true, /** 是否启用实时同步 */ enableRealTimeSync: false, /** 是否启用离线模式 */ enableOfflineMode: false }; /** * UI配置 */ export const uiConfig = { /** 编辑点最大数量 */ maxEditPoints: 20, /** 描述最大长度 */ maxDescriptionLength: 500, /** 是否显示调试信息 */ showDebugInfo: isDevelopment, /** 动画配置 */ animations: { enabled: true, duration: 300, easing: 'ease-out' }, /** 主题配置 */ theme: { primaryColor: '#3b82f6', successColor: '#10b981', errorColor: '#ef4444', warningColor: '#f59e0b' } };