import { StorageAdapter } from './StorageAdapter.js'
// import OSS from 'ali-oss'  // ⚠️ 需要安装：npm install ali-oss

/**
 * 阿里云OSS适配器
 * 
 * 适用场景：
 * - 云端SaaS部署（阿里云Serverless）
 * - 高可用、高并发场景
 * - 需要CDN加速
 * 
 * 配置要求：
 * - OSS_REGION: OSS地域（如：oss-cn-hangzhou）
 * - OSS_BUCKET: OSS Bucket名称
 * - OSS_ACCESS_KEY_ID: AccessKey ID
 * - OSS_ACCESS_KEY_SECRET: AccessKey Secret
 * 
 * @example
 * ```typescript
 * const adapter = new OSSAdapter({
 *   region: 'oss-cn-hangzhou',
 *   bucket: 'aiclinical-prod',
 *   accessKeyId: process.env.OSS_ACCESS_KEY_ID!,
 *   accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET!
 * })
 * await adapter.upload('literature/123.pdf', buffer)
 * ```
 * 
 * ⚠️ 当前为预留实现，待云端部署时完善
 */
export class OSSAdapter implements StorageAdapter {
  // private readonly client: OSS
  private readonly bucket: string
  private readonly region: string

  constructor(config: {
    region: string
    bucket: string
    accessKeyId: string
    accessKeySecret: string
  }) {
    this.region = config.region
    this.bucket = config.bucket

    // ⚠️ TODO: 待安装 ali-oss 后取消注释
    // this.client = new OSS({
    //   region: config.region,
    //   bucket: config.bucket,
    //   accessKeyId: config.accessKeyId,
    //   accessKeySecret: config.accessKeySecret
    // })
  }

  /**
   * 上传文件到OSS
   */
  async upload(_key: string, _buffer: Buffer): Promise<string> {
    // ⚠️ TODO: 待实现
    // const result = await this.client.put(key, buffer)
    // return result.url

    throw new Error('[OSSAdapter] Not implemented yet. Please install ali-oss and configure OSS.')
  }

  /**
   * 从OSS下载文件
   */
  async download(_key: string): Promise<Buffer> {
    // ⚠️ TODO: 待实现
    // const result = await this.client.get(key)
    // return result.content as Buffer

    throw new Error('[OSSAdapter] Not implemented yet. Please install ali-oss and configure OSS.')
  }

  /**
   * 从OSS删除文件
   */
  async delete(_key: string): Promise<void> {
    // ⚠️ TODO: 待实现
    // await this.client.delete(key)

    throw new Error('[OSSAdapter] Not implemented yet. Please install ali-oss and configure OSS.')
  }

  /**
   * 获取文件访问URL
   */
  getUrl(key: string): string {
    // 返回OSS公开访问URL
    // 格式：https://{bucket}.{region}.aliyuncs.com/{key}
    return `https://${this.bucket}.${this.region}.aliyuncs.com/${key}`
  }

  /**
   * 检查文件是否存在
   */
  async exists(_key: string): Promise<boolean> {
    // ⚠️ TODO: 待实现
    // try {
    //   await this.client.head(key)
    //   return true
    // } catch (error) {
    //   return false
    // }

    throw new Error('[OSSAdapter] Not implemented yet. Please install ali-oss and configure OSS.')
  }
}

/**
 * ⚠️ 实施说明：
 * 
 * 1. 安装依赖：
 *    npm install ali-oss
 *    npm install -D @types/ali-oss
 * 
 * 2. 取消注释代码：
 *    - import OSS from 'ali-oss'
 *    - new OSS({ ... })
 *    - 所有方法的实现代码
 * 
 * 3. 配置环境变量：
 *    OSS_REGION=oss-cn-hangzhou
 *    OSS_BUCKET=aiclinical-prod
 *    OSS_ACCESS_KEY_ID=your-access-key-id
 *    OSS_ACCESS_KEY_SECRET=your-access-key-secret
 * 
 * 4. 测试：
 *    - 上传小文件
 *    - 下载文件
 *    - 删除文件
 *    - 检查文件是否存在
 */

