/**
 * Text Video Agent API 类型定义
 */

// 任务类型枚举
export enum TaskType {
  TEA = 'tea',
  CHOP = 'chop',
  LADY = 'lady',
  VLOG = 'vlog'
}

// 任务状态枚举
export enum TaskStatus {
  PENDING = 'pending',
  RUNNING = 'running',
  COMPLETED = 'completed',
  FAILED = 'failed'
}

// 长宽比枚举
export enum AspectRatio {
  SQUARE = '1:1',
  PORTRAIT = '9:16',
  LANDSCAPE = '16:9',
  VERTICAL = '3:4',
  HORIZONTAL = '4:3'
}

// 视频时长选项
export enum VideoDuration {
  SHORT = '3',
  MEDIUM = '5',
  LONG = '10'
}

// 扩展的API响应接口
export interface ExtendedAPIResponse<T = any> {
  status: boolean
  msg: string
  data?: T
  timestamp?: string
  request_id?: string
}

// 图片生成结果
export interface ImageGenerationResult {
  image_url: string
  thumbnail_url?: string
  width?: number
  height?: number
  format?: string
  size?: number
  generation_time?: number
  prompt_used?: string
}

// 视频生成结果
export interface VideoGenerationResult {
  video_url: string
  thumbnail_url?: string
  duration: number
  width?: number
  height?: number
  format?: string
  size?: number
  generation_time?: number
  prompt_used?: string
  image_url_used?: string
}

// 任务详细信息
export interface TaskDetail {
  task_id: string
  task_type: TaskType
  status: TaskStatus
  progress: number
  created_at: string
  updated_at: string
  completed_at?: string
  prompt: string
  img_url?: string
  ar: string
  result?: ImageGenerationResult | VideoGenerationResult
  error?: {
    code: string
    message: string
    details?: any
  }
  metadata?: {
    user_id?: string
    session_id?: string
    client_info?: any
  }
}

// 图片描述结果
export interface ImageDescriptionResult {
  description: string
  tags?: string[]
  confidence?: number
  language?: string
  analysis_time?: number
}

// 文件上传结果
export interface FileUploadResult {
  file_url: string
  file_name: string
  file_size: number
  file_type: string
  upload_time: string
  cdn_url?: string
}

// 健康检查结果
export interface HealthCheckResult {
  service: string
  status: 'healthy' | 'unhealthy'
  version?: string
  uptime?: number
  dependencies?: {
    [key: string]: 'healthy' | 'unhealthy'
  }
}

// 示例提示词结果
export interface SamplePromptResult {
  task_type: string
  prompts: string[]
  examples?: {
    prompt: string
    description: string
    tags?: string[]
  }[]
}

// 生成选项配置
export interface GenerationOptions {
  // 通用选项
  quality?: 'low' | 'medium' | 'high' | 'ultra'
  style?: 'realistic' | 'artistic' | 'cartoon' | 'anime'
  mood?: 'bright' | 'dark' | 'neutral' | 'vibrant'
  
  // 图片特定选项
  image_format?: 'jpg' | 'png' | 'webp'
  image_quality?: number // 1-100
  
  // 视频特定选项
  video_format?: 'mp4' | 'webm' | 'avi'
  video_quality?: 'low' | 'medium' | 'high' | '4k'
  frame_rate?: number // fps
  
  // 高级选项
  seed?: number
  guidance_scale?: number
  num_inference_steps?: number
  negative_prompt?: string
}

// 批量处理请求
export interface BatchRequest {
  requests: {
    id: string
    type: 'image' | 'video'
    prompt: string
    options?: GenerationOptions
  }[]
  batch_options?: {
    parallel_limit?: number
    retry_failed?: boolean
    notify_on_complete?: boolean
  }
}

// 批量处理结果
export interface BatchResult {
  batch_id: string
  total_requests: number
  completed: number
  failed: number
  results: {
    id: string
    status: 'completed' | 'failed'
    result?: ImageGenerationResult | VideoGenerationResult
    error?: string
  }[]
}

// 使用统计
export interface UsageStats {
  user_id?: string
  period: 'daily' | 'weekly' | 'monthly'
  images_generated: number
  videos_generated: number
  total_generation_time: number
  total_cost?: number
  quota_remaining?: number
}

// 错误类型
export interface APIError {
  code: string
  message: string
  details?: any
  timestamp: string
  request_id?: string
  suggestion?: string
}

// 进度回调函数类型
export type ProgressCallback = (step: string, progress: number, details?: any) => void

// 事件回调函数类型
export type EventCallback = (event: {
  type: 'start' | 'progress' | 'complete' | 'error'
  data: any
  timestamp: string
}) => void

// 配置选项
export interface APIConfig {
  baseURL?: string
  timeout?: number
  retries?: number
  apiKey?: string
  userAgent?: string
  debug?: boolean
}

// 缓存选项
export interface CacheOptions {
  enabled: boolean
  ttl?: number // 缓存时间（秒）
  maxSize?: number // 最大缓存条目数
  storage?: 'memory' | 'localStorage' | 'sessionStorage'
}

// 高级配置
export interface AdvancedConfig extends APIConfig {
  cache?: CacheOptions
  rateLimit?: {
    enabled: boolean
    requestsPerMinute?: number
    requestsPerHour?: number
  }
  monitoring?: {
    enabled: boolean
    endpoint?: string
    metrics?: string[]
  }
}

// 导出所有类型的联合类型
export type AllGenerationResults = ImageGenerationResult | VideoGenerationResult
export type AllAPIResponses = ExtendedAPIResponse<AllGenerationResults>

// 常用的预设配置
export const PRESET_CONFIGS = {
  // 快速生成（低质量，快速）
  FAST: {
    quality: 'low' as const,
    max_wait_time: 60,
    poll_interval: 1
  },
  
  // 标准生成（中等质量）
  STANDARD: {
    quality: 'medium' as const,
    max_wait_time: 120,
    poll_interval: 2
  },
  
  // 高质量生成（高质量，较慢）
  HIGH_QUALITY: {
    quality: 'high' as const,
    max_wait_time: 300,
    poll_interval: 5
  },
  
  // 超高质量生成（最高质量，最慢）
  ULTRA: {
    quality: 'ultra' as const,
    max_wait_time: 600,
    poll_interval: 10
  }
} as const

// 常用的任务类型配置
export const TASK_TYPE_CONFIGS = {
  [TaskType.TEA]: {
    description: '茶叶相关内容生成',
    defaultAR: AspectRatio.PORTRAIT,
    suggestedDuration: VideoDuration.MEDIUM
  },
  [TaskType.CHOP]: {
    description: '切菜/烹饪相关内容生成',
    defaultAR: AspectRatio.LANDSCAPE,
    suggestedDuration: VideoDuration.SHORT
  },
  [TaskType.LADY]: {
    description: '女性人物相关内容生成',
    defaultAR: AspectRatio.PORTRAIT,
    suggestedDuration: VideoDuration.MEDIUM
  },
  [TaskType.VLOG]: {
    description: 'Vlog风格内容生成',
    defaultAR: AspectRatio.PORTRAIT,
    suggestedDuration: VideoDuration.LONG
  }
} as const
