//app.js
var http = require("utils/http.js");
App({
  onLaunch: function () {
    this.eventPool = {}; // 事件池：key=事件名，value=回调数组
    http.getToken();
    //自定义导航栏 获取设备顶部窗口的高度（不同设备窗口高度不一样，根据这个来设置自定义导航栏的高度）
    const windowInfo = wx.getWindowInfo()
    let custom = wx.getMenuButtonBoundingClientRect()
    this.globalData.statusBarHeight = windowInfo.statusBarHeight
    this.globalData.navBarHeight = custom.height + (custom.top - windowInfo.statusBarHeight) * 2
   
  },
  globalData: {
    // 定义全局请求队列
    requestQueue: [],
    // 是否正在进行登陆
    isLanding: false,
    // 购物车商品数量
    totalCartCount: 0,
    statusBarHeight: 0,
    navBarHeight: 0,
  },
    // 注册事件：只避免“同一实例重复注册同一回调”
  on(eventName, callback) {
    if (!this.eventPool[eventName]) this.eventPool[eventName] = [];
    // 只判断当前回调是否已存在，不影响其他实例的回调
    const isExist = this.eventPool[eventName].some(cb => cb === callback);
    if (!isExist) {
      this.eventPool[eventName].push(callback);
    }
  },

  // 触发事件：所有注册的回调都会执行（但同一时间只有1个实例活跃）
  emit(eventName, data) {
    const callbacks = this.eventPool[eventName] || [];
    // 调试用：查看当前注册的回调数（同一时间通常为1，切换页面时可能短暂为2）
    console.log(`事件${eventName}当前回调数：`, callbacks.length);
    callbacks.forEach(callback => callback(data));
  },

  // 精准移除：只删当前实例的回调，不影响其他实例
  off(eventName, callback) {
    const callbacks = this.eventPool[eventName] || [];
    this.eventPool[eventName] = callbacks.filter(cb => cb !== callback);
  }
})