/**
 * Store相关类型定义
 */

import { MenuThemeEnum, SystemThemeEnum } from '@/enums/appEnum'
import { LocationQueryRaw } from 'vue-router'

// 用户信息
export interface UserInfo {
  id: number // 用户ID
  username: string // 用户名
  phone: string // 手机号
  user_type: number // 用户类型 (1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号)
  user_type_name: string // 用户类型名称
  enterprise_id?: number // 企业ID（可选）
  enterprise_name?: string // 企业名称（可选）
  shop_id?: number // 店铺ID（可选）
  shop_name?: string // 店铺名称（可选）
  roles?: string[]
  buttons?: string[]
  avatar?: string
  email?: string
}

// 系统主题样式（light | dark）
export interface SystemThemeType {
  className: string
}

// 定义包含多个主题的类型
export type SystemThemeTypes = {
  [key in Exclude<SystemThemeEnum, SystemThemeEnum.AUTO>]: SystemThemeType
}

// 菜单主题样式
export interface MenuThemeType {
  theme: MenuThemeEnum
  background: string
  systemNameColor: string
  textColor: string
  textActiveColor: string
  iconColor: string
  iconActiveColor: string
  tabBarBackground: string
  systemBackground: string
  leftLineColor: string
  rightLineColor: string
  img?: string
}

// 设置中心
export interface SettingState {
  theme: string
  uniqueOpened: boolean
  menuButton: boolean
  showRefreshButton: boolean
  showCrumbs: boolean
  autoClose: boolean
  showWorkTab: boolean
  showLanguage: boolean
  showNprogress: boolean
  themeModel: string
}

// 多标签
export interface WorkTab {
  title: string
  path: string
  name: string
  keepAlive: boolean
  fixedTab?: boolean
  params?: object
  query?: LocationQueryRaw
  icon?: string
  isActive?: boolean
}

// 用户Store状态
export interface UserState {
  userInfo: UserInfo | null
  token: string | null
  roles: string[]
  permissions: string[]
}

// 设置Store状态
export interface SettingStoreState extends SettingState {
  // 额外的设置状态
  collapsed: boolean
  device: 'desktop' | 'mobile'
  language: string
}

// 工作标签页Store状态
export interface WorkTabState {
  tabs: WorkTab[]
  activeTab: string
  cachedTabs: string[]
}

// 菜单Store状态
export interface MenuState {
  menuList: any[]
  isLoaded: boolean
  collapsed: boolean
}

// 根Store状态类型
export interface RootState {
  user: UserState
  setting: SettingStoreState
  workTab: WorkTabState
  menu: MenuState
}
