import { defineStore } from 'pinia' import { fetchAdminMe, loginAdmin, type AdminUser } from '@/api/adminAuth' export const useAdminSessionStore = defineStore('adminSession', { state: () => ({ token: localStorage.getItem('admin_access_token') || '', refreshToken: localStorage.getItem('admin_refresh_token') || '', adminId: Number(localStorage.getItem('admin_id') || 0), username: localStorage.getItem('admin_username') || '', nickname: '', }), actions: { async login(username: string, password: string) { const result = await loginAdmin(username, password) this.applySession(result.admin, result.tokens.access_token, result.tokens.refresh_token) return result }, async loadMe() { const admin = await fetchAdminMe() this.applyAdmin(admin) return admin }, logout() { this.token = '' this.refreshToken = '' this.adminId = 0 this.username = '' this.nickname = '' localStorage.removeItem('admin_access_token') localStorage.removeItem('admin_refresh_token') localStorage.removeItem('admin_id') localStorage.removeItem('admin_username') }, applySession(admin: AdminUser, accessToken: string, refreshToken: string) { this.token = accessToken this.refreshToken = refreshToken localStorage.setItem('admin_access_token', accessToken) localStorage.setItem('admin_refresh_token', refreshToken) this.applyAdmin(admin) }, applyAdmin(admin: AdminUser) { this.adminId = admin.id this.username = admin.username this.nickname = admin.nickname localStorage.setItem('admin_id', String(admin.id)) localStorage.setItem('admin_username', admin.username) }, }, })