import { defineStore } from 'pinia'

interface UserProfile {
  name: string
  role: string
  permissionCodes?: string[]
}

const tokenKey = 'talent-card-admin-token'
const userKey = 'talent-card-admin-user'

function storedValue(key: string) {
  return localStorage.getItem(key) || sessionStorage.getItem(key) || ''
}

function clearSession() {
  localStorage.removeItem(tokenKey)
  localStorage.removeItem(userKey)
  sessionStorage.removeItem(tokenKey)
  sessionStorage.removeItem(userKey)
}

export const useAppStore = defineStore('app', {
  state: () => ({
    token: storedValue(tokenKey),
    user: JSON.parse(storedValue(userKey) || '{"name":"平台管理员","role":"平台管理"}') as UserProfile,
  }),
  getters: {
    isLoggedIn: (state) => Boolean(state.token),
  },
  actions: {
    login(token: string, profile: UserProfile, remember: boolean) {
      clearSession()
      this.token = token
      this.user = profile
      const storage = remember ? localStorage : sessionStorage
      storage.setItem(tokenKey, token)
      storage.setItem(userKey, JSON.stringify(profile))
    },
    logout() {
      this.token = ''
      clearSession()
    },
  },
})
