// SimplifiedResourceManager.js - 简化版资源管理API
import ResourceManager from './ResourceManager.js';

/**
 * 简化版资源管理器
 * 参考PixiJS、Egret和Vue 3的设计理念
 */
class SimplifiedResourceManager extends ResourceManager {
  constructor() {
    super();
    
    // 创建简化API的快捷方法
    this._createSimplifiedAPI();
  }
  
  /**
   * 创建简化API的快捷方法
   */
  _createSimplifiedAPI() {
    // 简化的资源加载API
    this.load = this._loadAsset.bind(this);
    
    // 简化的资源获取API
    this.get = this._getAsset.bind(this);
    
    // 简化的资源预加载API
    this.preload = this._preloadAssets.bind(this);
  }
  
  /**
   * 简化的资源加载API
   * @param {string|array} src - 资源路径或资源路径数组
   * @returns {Promise} 资源加载Promise
   */
  _loadAsset(src) {
    // 如果是数组，批量加载
    if (Array.isArray(src)) {
      const promises = src.map(s => this.load(s));
      return Promise.all(promises);
    }
    
    // 单个资源加载
    return this.load(src);
  }
  
  /**
   * 简化的资源获取API
   * @param {string} src - 资源路径
   * @returns {any} 资源对象
   */
  _getAsset(src) {
    return this.get(src);
  }
  
  /**
   * 简化的资源预加载API
   * @param {array} assets - 资源数组
   * @param {function} onProgress - 进度回调函数
   * @returns {Promise} 所有资源加载完成的Promise
   */
  _preloadAssets(assets, onProgress) {
    let loadedCount = 0;
    const total = assets.length;
    
    const promises = assets.map(src => {
      return this.load(src).then(result => {
        loadedCount++;
        if (onProgress) {
          onProgress(loadedCount / total, loadedCount, total);
        }
        return result;
      });
    });
    
    return Promise.all(promises);
  }
  
  /**
   * 简化的图像加载API
   * @param {string} src - 图像路径
   * @returns {Promise} 图像加载Promise
   */
  loadImage(src) {
    return this.load(src);
  }
  
  /**
   * 简化的音频加载API
   * @param {string} src - 音频路径
   * @returns {Promise} 音频加载Promise
   */
  loadAudio(src) {
    // 音频资源需要特殊处理
    return new Promise((resolve, reject) => {
      const audio = new Audio();
      audio.src = src;
      
      audio.addEventListener('loadeddata', () => {
        this.resources.set(src, audio);
        resolve(audio);
      });
      
      audio.addEventListener('error', (error) => {
        reject(error);
      });
      
      // 开始加载
      audio.load();
    });
  }
  
  /**
   * 简化的JSON加载API
   * @param {string} src - JSON文件路径
   * @returns {Promise} JSON加载Promise
   */
  loadJSON(src) {
    return fetch(src)
      .then(response => response.json())
      .then(data => {
        this.resources.set(src, data);
        return data;
      });
  }
  
  /**
   * 简化的文本文件加载API
   * @param {string} src - 文本文件路径
   * @returns {Promise} 文本文件加载Promise
   */
  loadText(src) {
    return fetch(src)
      .then(response => response.text())
      .then(data => {
        this.resources.set(src, data);
        return data;
      });
  }
}

export { SimplifiedResourceManager };