/**
 * FFmpeg Adapter Interface
 * 定义统一的 FFmpeg 操作接口,支持多种实现方式
 */

/**
 * 视频信息结果
 */
export interface VideoInfoResult {
  /** 视频宽度(像素) */
  width: number;
  /** 视频高度(像素) */
  height: number;
  /** 视频时长(秒) */
  duration: number;
  /** 容器格式 */
  format: string;
  /** 缩略图 Buffer */
  thumbnail?: Buffer;
}

/**
 * FFmpeg 适配器接口
 */
export interface IFFmpegAdapter {
  /** 适配器名称 */
  readonly name: string;

  /** 是否可用 */
  isAvailable (): Promise<boolean>;

  /**
     * 获取视频信息(包含缩略图)
     * @param videoPath 视频文件路径
     * @returns 视频信息
     */
  getVideoInfo (videoPath: string): Promise<VideoInfoResult>;

  /**
     * 获取音视频文件时长
     * @param filePath 文件路径
     * @returns 时长(秒)
     */
  getDuration (filePath: string): Promise<number>;

  /**
   * 判断是否为 Silk 格式
   * @param filePath 文件路径
   */
  isSilk (filePath: string): Promise<boolean>;

  /**
     * 转换音频为 PCM 格式
     * @param filePath 输入文件路径
     * @param pcmPath 输出 PCM 文件路径
     * @returns PCM 数据 Buffer
     */
  convertToPCM (filePath: string, pcmPath: string): Promise<{ result: boolean, sampleRate: number; }>;

  /**
     * 转换音频文件
     * @param inputFile 输入文件路径
     * @param outputFile 输出文件路径
     * @param format 目标格式 ('amr' | 'silk' 等)
     */
  convertFile (inputFile: string, outputFile: string, format: string): Promise<void>;

  /**
     * 提取视频缩略图
     * @param videoPath 视频文件路径
     * @param thumbnailPath 缩略图输出路径
     */
  extractThumbnail (videoPath: string, thumbnailPath: string): Promise<void>;

  convertToNTSilkTct (inputFile: string, outputFile: string): Promise<void>;
}
