import { createRouter, createWebHistory } from 'vue-router'
import { useUserStore } from '@/stores/user'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: '/',
      redirect: '/login',
    },
    {
      path: '/login',
      name: 'Login',
      component: () => import('@/views/LoginView.vue'),
    },
    {
      path: '/p/products',
      name: 'PublicProducts',
      component: () => import('@/views/public/PublicProductsView.vue'),
      meta: { public: true, skipAuth: 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 },
    },
  ],
})

router.beforeEach((to) => {
  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
