// 每一个音频消息都有自己的 ctx。
// 可以有多个 ctx，每次播放都能知道是哪个 ctx 在调用，从而让其他的 ctx pause。
// 消息销毁，记得处理 ctx。
// 主要是同步跨 ctx 的操作，保证只有一个 ctx 播放
let allCtx = {};
let inUseCtx = null;
let allComm = {};

function proxier(ctx) {
  let __play__ = ctx.play;
  let __pause__ = ctx.pause;
  ctx.play = playProxier;
  ctx.pause = pauseProxier;

  function playProxier() {
    // 如果正在播放的不是自己，暂停
    if (inUseCtx && inUseCtx != this) {
      inUseCtx.pause();
    }

    __play__.call(this);

    inUseCtx = this;
  }

  function pauseProxier() {
    // 只有是自己才 pause
    if (inUseCtx == this) {
      __pause__.call(this);
    }
  }
}

module.exports = {
  getCtx(mid) {
    let returnCtx = allCtx[mid];

    if (!returnCtx) {
      returnCtx = uni.createInnerAudioContext();
      allCtx[mid] = returnCtx;
      proxier(returnCtx);
    }

    return returnCtx;
  },

  getAllCtx() {
    uni.setStorageSync("allCtx", JSON.stringify(Object.keys(allCtx)));
    return allCtx;
  },

  getCommponet(mid, comm) {
    let curComm = allComm[mid];

    if (!curComm) {
      allComm[mid] = comm;
    }

    return allComm;
  }

};