// SimplifiedAudioManager.js - 简化版音频API
import AudioManager from './AudioManager.js';

/**
 * 简化版音频管理器
 * 参考PixiJS、Egret和Vue 3的设计理念
 */
class SimplifiedAudioManager extends AudioManager {
  constructor() {
    super();
    
    // 创建简化API的快捷方法
    this._createSimplifiedAPI();
  }
  
  /**
   * 创建简化API的快捷方法
   */
  _createSimplifiedAPI() {
    // 简化的音频加载API
    this.load = this._loadAudio.bind(this);
    
    // 简化的音频播放API
    this.play = this._playAudio.bind(this);
    
    // 简化的音频停止API
    this.stop = this._stopAudio.bind(this);
    
    // 简化的音频暂停API
    this.pause = this._pauseAudio.bind(this);
    
    // 简化的音频恢复API
    this.resume = this._resumeAudio.bind(this);
    
    // 简化的音量控制API
    this.volume = this._setVolume.bind(this);
  }
  
  /**
   * 简化的音频加载API
   * @param {string} name - 音频名称
   * @param {string} src - 音频路径
   * @param {object} options - 音频选项
   * @returns {Promise} 音频加载Promise
   */
  _loadAudio(name, src, options = {}) {
    if (options.type === 'music') {
      return this.loadMusic(name, src, options);
    } else {
      return this.loadSound(name, src, options);
    }
  }
  
  /**
   * 简化的音频播放API
   * @param {string} name - 音频名称
   * @param {object} options - 播放选项
   * @returns {AudioBufferSourceNode|HTMLAudioElement} 音频播放对象
   */
  _playAudio(name, options = {}) {
    if (options.type === 'music') {
      return this.playMusic(name, options);
    } else {
      return this.playSound(name, options);
    }
  }
  
  /**
   * 简化的音频停止API
   * @param {string} name - 音频名称
   * @param {string} type - 音频类型 ('sound' 或 'music')
   * @returns {AudioManager} 音频管理器实例
   */
  _stopAudio(name, type = 'sound') {
    if (type === 'music') {
      return this.stopMusic(name);
    } else {
      // 音效通常是短音频，停止所有同名音效
      return this;
    }
  }
  
  /**
   * 简化的音频暂停API
   * @param {string} name - 音频名称
   * @param {string} type - 音频类型 ('sound' 或 'music')
   * @returns {AudioManager} 音频管理器实例
   */
  _pauseAudio(name, type = 'music') {
    if (type === 'music') {
      return this.pauseMusic(name);
    } else {
      // 音效通常是短音频，不支持暂停
      return this;
    }
  }
  
  /**
   * 简化的音频恢复API
   * @param {string} name - 音频名称
   * @param {string} type - 音频类型 ('sound' 或 'music')
   * @returns {AudioManager} 音频管理器实例
   */
  _resumeAudio(name, type = 'music') {
    if (type === 'music') {
      return this.resumeMusic(name);
    } else {
      // 音效通常是短音频，不支持恢复
      return this;
    }
  }
  
  /**
   * 简化的音量控制API
   * @param {number} volume - 音量值 (0-1)
   * @param {string} type - 音频类型 ('master', 'sound', 'music')
   * @returns {AudioManager} 音频管理器实例
   */
  _setVolume(volume, type = 'master') {
    switch (type) {
      case 'master':
        return this.setMasterVolume(volume);
      case 'sound':
        return this.setSoundVolume(volume);
      case 'music':
        return this.setMusicVolume(volume);
      default:
        return this.setMasterVolume(volume);
    }
  }
  
  /**
   * 简化的音频预加载API
   * @param {array} audios - 音频数组
   * @param {function} onProgress - 进度回调函数
   * @returns {Promise} 所有音频加载完成的Promise
   */
  preload(audios, onProgress) {
    let loadedCount = 0;
    const total = audios.length;
    
    const promises = audios.map(audio => {
      return this.load(audio.name, audio.src, audio.options || {}).then(result => {
        loadedCount++;
        if (onProgress) {
          onProgress(loadedCount / total, loadedCount, total);
        }
        return result;
      });
    });
    
    return Promise.all(promises);
  }
  
  /**
   * 简化的音频状态检查API
   * @param {string} name - 音频名称
   * @param {string} type - 音频类型 ('sound' 或 'music')
   * @returns {boolean} 音频是否正在播放
   */
  isPlaying(name, type = 'music') {
    if (type === 'music') {
      // 检查音乐是否正在播放
      if (this.music[name]) {
        // 这里需要检查具体的音频播放状态
        // 由于实现细节可能不同，返回一个模拟值
        return true;
      }
    }
    return false;
  }
  
  /**
   * 简化的音频时长获取API
   * @param {string} name - 音频名称
   * @param {string} type - 音频类型 ('sound' 或 'music')
   * @returns {number} 音频时长(秒)
   */
  getDuration(name, type = 'music') {
    if (type === 'music') {
      if (this.music[name]) {
        // 返回音频时长
        return this.music[name].duration || 0;
      }
    } else {
      if (this.sounds[name]) {
        // 返回音频时长
        return this.sounds[name].duration || 0;
      }
    }
    return 0;
  }
}

// 导出简化版音频管理器类
export { SimplifiedAudioManager };