import { authState, signOut } from './modules/auth/auth-store.js';

/** 代码作用（白话）：提供已登录后台外壳，让登录路由不显示侧栏。关联文件：router/index.js、LoginView.js。关联逻辑（调用链/数据流）：当前 Hash 路由 -> 登录页或菜单壳 -> RouterView。 */
export default {
  /** 代码作用（白话）：把认证状态、退出动作和菜单权限判断提供给页面模板；关联文件：auth-store.js、router/index.js。关联逻辑（调用链/数据流）：路由守卫恢复身份 -> authState.ready/user -> 此组件决定加载占位、登录页或后台外壳。 */
  setup() {
    /** 代码作用（白话）：退出当前会话并无论后端 Cookie 清理是否报错都跳回登录路由。关联文件：auth-store.js、AuthController.java。关联逻辑（调用链/数据流）：退出按钮 -> POST logout -> 清空前端身份 -> finally 跳转 /login。 */
    async function logout() {
      try {
        await signOut();
      } finally {
        window.location.hash = '#/login';
      }
    }

    /** 代码作用（白话）：判断当前用户能否看见某个受控菜单，编辑权限自然包含只读菜单。关联文件：router/index.js、PagePermissionService.java。关联逻辑（调用链/数据流）：/api/auth/me 权限 -> 侧栏菜单 -> 路由守卫。 */
    function canVisit(page) {
      return authState.user?.pagePermissions?.[page] && authState.user.pagePermissions[page] !== 'NONE';
    }

    /** 代码作用（白话）：判断当前用户是否可以使用设置下的账号与权限功能。关联文件：UserPermissionView.js、SystemUserAdminService.java。关联逻辑（调用链/数据流）：角色码 -> 菜单展示 -> 后端二次授权。 */
    function isAdministrator() {
      return ['DEVELOPER', 'SUPER_ADMIN'].includes(authState.user?.roleCode);
    }

    /** 代码作用（白话）：在会话检查遇到网络问题时重新加载当前地址，让路由守卫重新请求当前用户而不先跳登录页。关联文件：auth-store.js、router/index.js。关联逻辑（调用链/数据流）：网络错误提示按钮 -> retryConnection() -> 浏览器刷新当前 Hash 地址 -> bootstrapAuth() -> 后台、登录页或再次提示。 */
    function retryConnection() {
      window.location.reload();
    }

    return { authState, logout, canVisit, isAdministrator, retryConnection };
  },
  template: `<main v-if="authState.connectionError" class="auth-network-error" role="alert"><section class="auth-network-error__panel"><h1>网络连接异常</h1><p>暂时无法确认登录状态，请检查网络后重试。</p><button type="button" @click="retryConnection">重新连接</button></section></main><main v-else-if="!authState.ready" class="auth-loading" role="status" aria-live="polite">正在验证登录状态…</main><RouterView v-else-if="$route.path === '/login'" /><div v-else class="app-shell"><aside class="sidebar"><p class="eyebrow">学有为资产</p><h1>学有为资产后台</h1><nav aria-label="主导航"><RouterLink v-if="canVisit('overview')" to="/overview">总览</RouterLink><RouterLink v-if="canVisit('domain')" to="/domain">域名资料</RouterLink><RouterLink v-if="canVisit('reference-wecom')" to="/reference/wecom">企微资料</RouterLink><RouterLink v-if="canVisit('phone-assets')" to="/phone-assets">手机号资产</RouterLink><RouterLink v-if="isAdministrator()" to="/device-assets">设备资产管理</RouterLink><RouterLink v-if="canVisit('alerts')" to="/alerts">提醒中心</RouterLink><RouterLink v-if="isAdministrator()" class="settings-link" to="/settings/users-permissions"><span aria-hidden="true">⚙</span> 账号与权限</RouterLink></nav><button class="logout-button" @click="logout">退出登录</button></aside><main class="content"><RouterView /></main></div>`
};
