import { createRouter, createWebHashHistory } from 'vue-router';
import LegacyReferenceView from '../reference/LegacyReferenceView.js';
import PhoneAssetView from '../modules/phone/PhoneAssetView.js';
import WecomAccountView from '../modules/wecom/WecomAccountView.js';
import DeviceAssetView from '../modules/device/DeviceAssetView.js';
import LoginView from '../modules/auth/LoginView.js';
import UserPermissionView from '../modules/system-user/UserPermissionView.js';
import { authState, bootstrapAuth } from '../modules/auth/auth-store.js';

/**
 * 代码作用（白话）：生成暂未重构完成的普通页面，避免旧业务模块被删除后导航落到空白或继续请求旧接口。
 * 关联文件：frontend/src/App.js、frontend/src/router/index.js。
 * 关联逻辑（调用链/数据流）：导航到 overview/domain/alerts -> createPlaceholderView() -> RouterView 输出重构提示。
 */
function createPlaceholderView(title) {
  return { template: `<section class="placeholder"><h2>${title}</h2><p>该模块将在新资产表接口完成后重构。</p></section>` };
}

/**
 * 代码作用（白话）：定义资产后台 Hash 路由，将企微资料连接到真实列表，同时保留手机号静态参考页面。
 * 关联文件：frontend/src/App.js、frontend/src/modules/wecom/WecomAccountView.js、frontend/tests/wecom-account.spec.js。
 * 关联逻辑（调用链/数据流）：Hash 地址 -> router -> 真实企微列表或静态手机号参考页 -> 页面渲染。
 */
const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    { path: '/', redirect: '/overview' },
    { path: '/login', component: LoginView, meta: { public: true } },
    { path: '/overview', component: createPlaceholderView('资产总览'), meta: { page: 'overview' } },
    { path: '/phone-assets', component: PhoneAssetView, meta: { page: 'phone-assets' } },
    { path: '/device-assets', component: DeviceAssetView, meta: { administratorOnly: true } },
    { path: '/domain', component: createPlaceholderView('域名资料'), meta: { page: 'domain' } },
    { path: '/alerts', component: createPlaceholderView('提醒中心'), meta: { page: 'alerts' } },
    { path: '/reference/wecom', component: WecomAccountView, meta: { page: 'reference-wecom' } },
    { path: '/settings/users-permissions', component: UserPermissionView, meta: { administratorOnly: true } },
    { path: '/reference/phone', component: LegacyReferenceView, props: { kind: 'phone' } }
  ]
});

/** 代码作用（白话）：在进入业务路由前恢复 Cookie 会话，未登录用户一律进入新建的登录路由。关联文件：auth-store.js、LoginView.js。关联逻辑（调用链/数据流）：Hash 地址 -> 路由守卫 -> /api/auth/me -> 业务页或 /login。 */
/** 代码作用（白话）：在已登录后继续按逐页权限和管理角色校验目标路由，避免只隐藏菜单就能手输地址绕过；关联文件：App.js、PagePermissionService.java。关联逻辑（调用链/数据流）：路由地址 -> authState 有效权限 -> 放行或返回总览。 */
/** 代码作用（白话）：集中决定首轮认证后的目标页面；网络异常时保留当前地址交给错误页，其他结果再执行公开页、登录页和权限判断。关联文件：auth-store.js、auth-api-client.js、App.js。关联逻辑（调用链/数据流）：Hash 地址 -> bootstrapAuth() -> connectionError 或 user -> 当前地址、/login、/overview 或业务页。 */
router.beforeEach(async to => { if (!authState.ready) await bootstrapAuth(); if (authState.connectionError) return true; if (to.meta.public) return authState.user ? '/overview' : true; if (!authState.user) return '/login'; const isAdministrator = ['DEVELOPER', 'SUPER_ADMIN'].includes(authState.user.roleCode); if (to.meta.administratorOnly && !isAdministrator) return '/overview'; if (to.meta.page && authState.user.pagePermissions?.[to.meta.page] === 'NONE' && to.path !== '/overview') return '/overview'; return true; });

export default router;
