import { defineStore } from 'pinia' import { ref } from 'vue' import { adminApi, getToken, setToken } from '@/api/client' export const useAuthStore = defineStore('auth', () => { const token = ref(getToken()) const username = ref('') const role = ref('') const permissions = ref([]) function applyMe(me: { username: string; role?: string; permissions?: string[] }) { username.value = me.username role.value = me.role || '' permissions.value = me.permissions ?? [] } async function login(user: string, password: string) { const res = await adminApi.login(user, password) setToken(res.token) token.value = res.token applyMe(res.admin) } async function hydrate() { if (!token.value) return false try { const me = await adminApi.me() applyMe(me) return true } catch { setToken(null) token.value = null return false } } async function logout() { try { await adminApi.logout() } catch { /* ignore */ } setToken(null) token.value = null username.value = '' role.value = '' permissions.value = [] } function can(code: string) { return permissions.value.includes(code) } return { token, username, role, permissions, can, login, logout, hydrate } })