/**
 * 基础数据源抽象类
 * 所有数据源都应该继承自这个类
 */

export abstract class BaseDataSource {
  /**
   * 模拟API延迟
   * @param ms 延迟时间（毫秒）
   */
  protected async delay(ms: number = 300): Promise<void> {
    return new Promise(resolve => setTimeout(resolve, ms));
  }

  /**
   * 处理错误
   * @param error 错误对象
   * @param fallback  fallback值
   */
  protected handleError<T>(error: any, fallback: T): T {
    console.error('DataSource Error:', error);
    return fallback;
  }
}

/**
 * 数据源工厂类
 * 用于创建和管理所有数据源
 */
export class DataSourceFactory {
  private static dataSources: Map<string, any> = new Map();

  /**
   * 注册数据源
   * @param name 数据源名称
   * @param dataSource 数据源实例
   */
  static register(name: string, dataSource: any): void {
    this.dataSources.set(name, dataSource);
  }

  /**
   * 获取数据源
   * @param name 数据源名称
   */
  static get<T>(name: string): T {
    const dataSource = this.dataSources.get(name);
    if (!dataSource) {
      throw new Error(`DataSource ${name} not found`);
    }
    return dataSource as T;
  }

  /**
   * 获取所有数据源
   */
  static getAll(): Map<string, any> {
    return this.dataSources;
  }
}
