/* AI_CHANGELOG
| 日期 | Prompt | 变更 |
|------|--------|------|
| 2026-03-23 | 角色路由+页面权限守卫 | 从 globalData.visibleTabs 动态读取可见 tab，pageLifetimes.show 刷新 |
*/
/**
 * 自定义 tabBar 组件
 *
 * 微信 custom-tab-bar 机制：tabBar 页面由框架自动挂载；
 * 非 tabBar 页面（如 board-customer/board-coach）可手动引用。
 *
 * 支持 2/3 按钮动态布局，权限数据从 globalData.visibleTabs 读取。
 *
 * CHANGE 2026-03-23 | 角色路由：从 globalData 动态读取可见 tab
 */

/** tab 路由映射（key → url + 是否为 tabBar 页面） */
const TAB_ROUTES: Record<string, { url: string; isTabBarPage: boolean }> = {
  task: { url: '/pages/task-list/task-list', isTabBarPage: true },
  board: { url: '/pages/board-finance/board-finance', isTabBarPage: true },
  my: { url: '/pages/my-profile/my-profile', isTabBarPage: true },
}

/** 全量 tab 定义 */
const ALL_TABS = [
  { key: 'task', label: '任务', icon: '/assets/icons/tab-task-nav.svg', activeIcon: '/assets/icons/tab-task-nav-active.svg' },
  { key: 'board', label: '看板', icon: '/assets/icons/tab-board-nav.svg', activeIcon: '/assets/icons/tab-board-nav-active.svg' },
  { key: 'my', label: '我的', icon: '/assets/icons/tab-my-nav.svg', activeIcon: '/assets/icons/tab-my-nav-active.svg' },
]

Component({
  properties: {
    /** 当前激活的 tab key */
    active: {
      type: String,
      value: '',
    },
  },

  data: {
    tabs: ALL_TABS,
    tabCount: ALL_TABS.length,
  },

  lifetimes: {
    attached() {
      this._refreshTabs()
    },
  },

  pageLifetimes: {
    show() {
      // 每次页面显示时刷新 tab（角色可能因切换门店而变化）
      this._refreshTabs()
    },
  },

  methods: {
    /** 从 globalData.visibleTabs 刷新可见 tab 列表 */
    _refreshTabs() {
      const app = getApp<IAppOption>()
      const visibleKeys = app.globalData.visibleTabs || ['task', 'board', 'my']
      const tabs = ALL_TABS.filter((t) => visibleKeys.includes(t.key))
      this.setData({ tabs, tabCount: tabs.length })
    },

    onTap(e: WechatMiniprogram.TouchEvent) {
      const key = e.currentTarget.dataset.key as string
      if (key === (this as unknown as { data: { active: string } }).data.active) return

      const route = TAB_ROUTES[key]
      if (!route) return

      if (route.isTabBarPage) {
        wx.switchTab({ url: route.url })
      } else {
        wx.navigateTo({ url: route.url })
      }
    },
  },
})
