/**
 * 音频模块
 * @author 薛鸿潇
 */
export default class AudioSystem {

    /**
     * 背景音乐播放
     * @param clip 音频资源
     * @param loop 循环
     * @returns audio_id
     */
    public playMusic(clip: cc.AudioClip, loop: boolean = false): number {
        return cc.audioEngine.playMusic(clip, loop);
    }

    /**
     * 播放音效文件
     * @param clip 
     * @param loop 
     * @returns audio_id
     */
    public playEffect(clip: cc.AudioClip, loop = false): number {
        return cc.audioEngine.playEffect(clip, loop);
    }

    /**
     * 停止播放音效
     * @param audio_id 
     */
    public stopEffect(audio_id: number): void {
        cc.audioEngine.stopEffect(audio_id);
    }

    /**
     * 设置音效声音大小
     * @param value 
     */
    public setEffectVolume(value: number): void {
        cc.audioEngine.setEffectsVolume(value);
    }

    /**
     * 获取音效大小
     * @return 0.0 - 1.0
     */
    public getEffectVolume(): number {
        return cc.audioEngine.getEffectsVolume();
    }

    /**
     * 停止播放所有正在播放的音效
     */
    public stopAllEffects() {
        cc.audioEngine.stopAllEffects();
    }

    /**
     * 暂停当前播放音乐
     */
    public pauseMusic() {
        cc.audioEngine.pauseMusic();
    }

    /**
     * 恢复当前说暂停的所有音效
     */
    public resumeAllEffects() {
        cc.audioEngine.resumeAllEffects();
    }

    /**
     * 恢复当前被暂停音乐音乐
     */
    public resumeMusic() {
        cc.audioEngine.resumeMusic();
    }

    /**
     * 暂停播放音乐
     */
    public stopMusic() {
        cc.audioEngine.stopMusic();
    }

    /**
     * 设置音乐音量
     * @param value 0~1音量
     */
    public setMusicVolume(value: number) {
        cc.audioEngine.setMusicVolume(value);
    }

    /**
     * 获取音乐音量
     * @returns {number}
     */
    public getMusicVolume() {
        return cc.audioEngine.getMusicVolume();
    }

    /**
     * 音乐是否正在播放（验证些方法来实现背景音乐是否播放完成）
     * @returns {boolean}
     */
    public isMusicPlaying() {
        return cc.audioEngine.isMusicPlaying();
    }

    /**
     * 释放指定音效资源
     * @param audio 音频资源
     */
    public releaseAudio(audio: cc.AudioClip) {
        if (!audio) {
            cc.error("【音频】资源" + audio + "不存在， 释放失败")
            return;
        }
        cc.audioEngine.uncache(audio);
    }

    /**
     * 停止所有音频
     */
    public stopAllAudio() {
        cc.audioEngine.stopAll();
    }

    /**
     * 释放所有音频
     */
    public releaseAllAudio() {
        cc.audioEngine.uncacheAll();
    }
}