import { createRouter, createWebHistory } from 'vue-router'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
import { usePartnerStore } from '@/stores/partner'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: '/',
      redirect: '/login',
    },
    {
      path: '/login',
      name: 'Login',
      component: () => import('@/views/LoginView.vue'),
    },
    // 业务员查询融合入口（TASK-379 路径重构，2026-04-21）：
    // - URL 保持 /p/products?k=xxx（客户原链接不变，k 做身份追踪）
    // - 未登录显示登录表单，已登录显示产品查询（页面内条件渲染，不跳路由）
    // - 取代原 /partner/login 和 /partner/products 独立页
    {
      path: '/p/products',
      name: 'PartnerProducts',
      component: () => import('@/views/public/PublicProductsView.vue'),
      meta: { public: true, skipAuth: true, partner: true },
    },
    // 总业务员（彭春花）CRUD 入口
    {
      path: '/partner/admin/salesmen',
      name: 'PartnerAdminSalesmen',
      component: () => import('@/views/partner/admin/SalesmanManagement.vue'),
      meta: { partner: true, requiresPartnerAuth: true, requiresMaster: true },
    },
    {
      path: '/customers',
      name: 'Customers',
      component: () => import('@/views/CustomersView.vue'),
      meta: { requiresAuth: true },
    },
    {
      path: '/my-videos',
      name: 'MyVideos',
      component: () => import('@/views/MyVideosView.vue'),
      meta: { requiresAuth: true },
    },
    {
      path: '/customer/:id',
      name: 'CustomerBoard',
      component: () => import('@/views/BoardView.vue'),
      meta: { requiresAuth: true },
    },
    {
      path: '/product/:id',
      name: 'ProductDetail',
      component: () => import('@/views/ProductDetailView.vue'),
      meta: { requiresAuth: true },
    },
    {
      path: '/knowledge',
      name: 'Knowledge',
      component: () => import('@/views/KnowledgeView.vue'),
      meta: { requiresAuth: true, requiredPermission: 'knowledge' },
    },
    {
      path: '/admin/quick-pick',
      name: 'QuickPickAdmin',
      component: () => import('@/views/QuickPickAdminView.vue'),
      meta: { requiresAuth: true, requiredPermission: 'quick_pick' },
    },
    {
      path: '/dialects',
      name: 'Dialects',
      component: () => import('@/views/DialectsView.vue'),
      meta: { requiresAuth: true, requiredPermission: 'dialects' },
    },
    {
      path: '/dimensions',
      name: 'Dimensions',
      component: () => import('@/views/DimensionsView.vue'),
      meta: { requiresAuth: true, requiredPermission: 'dimensions' },
    },
    {
      path: '/admin/documents',
      name: 'Documents',
      component: () => import('@/views/DocumentsView.vue'),
      meta: { requiresAuth: true, requiredPermission: 'documents' },
    },
    {
      path: '/admin/rbac',
      name: 'RbacAdmin',
      component: () => import('@/views/RbacAdminView.vue'),
      meta: { requiresAuth: true, requiresSuperAdmin: true },
    },
    {
      path: '/admin/policy-v2/projects',
      name: 'PolicyV2ProjectList',
      component: () => import('@/views/admin/PolicyV2ProjectListView.vue'),
      meta: { requiresAuth: true, requiredPermission: 'quick_pick' },
    },
    {
      path: '/admin/policy-v2/upload',
      name: 'PolicyV2Upload',
      component: () => import('@/views/admin/PolicyV2UploadView.vue'),
      meta: { requiresAuth: true, requiredPermission: 'quick_pick' },
    },
    {
      path: '/admin/policy-v2/tasks/:id',
      name: 'PolicyV2TaskProgress',
      component: () => import('@/views/admin/PolicyV2TaskProgressView.vue'),
      meta: { requiresAuth: true, requiredPermission: 'quick_pick' },
    },
    {
      path: '/admin/policy-v2/projects/:id/review',
      name: 'PolicyV2Review',
      component: () => import('@/views/admin/PolicyV2ReviewView.vue'),
      meta: { requiresAuth: true, requiredPermission: 'quick_pick' },
    },
    {
      path: '/admin/policy-v2/projects/:id',
      name: 'PolicyV2ProjectDetail',
      component: () => import('@/views/admin/PolicyV2ProjectDetailView.vue'),
      meta: { requiresAuth: true, requiredPermission: 'quick_pick' },
    },
    {
      path: '/admin/sales-activity',
      name: 'SalesActivity',
      component: () => import('@/views/admin/SalesActivityView.vue'),
      meta: { requiresAuth: true, requiredPermission: 'sales_activity' },
    },
    {
      path: '/admin/performance',
      name: 'Performance',
      component: () => import('@/views/PerformanceView.vue'),
      meta: { requiresAuth: true, requiresSuperAdmin: true },
    },
    {
      path: '/admin/salesmen',
      name: 'SalesmanList',
      // TASK-378 业务员管理后台（mock 先行）。
      // 当前权限：requiresSuperAdmin=true，等 TASK-378 后端给彭春花 is_master 接入后，
      // 改成自定义权限守卫（is_super_admin OR is_master）。
      component: () => import('@/views/admin/SalesmanListView.vue'),
      meta: { requiresAuth: true, requiresSuperAdmin: true },
    },
  ],
})

router.beforeEach((to) => {
  // 业务员路由守卫（TASK-379 路径重构后：登录页 = /p/products 融合入口）
  if (to.meta.requiresPartnerAuth) {
    const partnerStore = usePartnerStore()
    if (!partnerStore.isLoggedIn) {
      // 未登录 → 跳 /p/products 融合页（未登录态显示登录表单）
      return { name: 'PartnerProducts' }
    }
    // B 方案：总业务员专属路由（管业务员 CRUD）
    if (to.meta.requiresMaster && !partnerStore.isMaster) {
      ElMessage.error('只有总业务员可访问')
      return { name: 'PartnerProducts' }
    }
    return
  }
  if (to.meta.requiresAuth) {
    const userStore = useUserStore()
    if (!userStore.isLoggedIn) {
      return { name: 'Login', query: { redirect: to.fullPath } }
    }
    if (to.meta.requiresSuperAdmin && !userStore.isSuperAdmin) {
      return { name: 'Customers' }
    }
    if (to.meta.requiredPermission && !userStore.hasPermission(to.meta.requiredPermission as string)) {
      return { name: 'Customers' }
    }
  }
})

export default router
