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

const router = createRouter({
  history: createWebHistory(`${import.meta.env.VITE_BASE_URL}`),
  routes: [
    {
      path: '/',
      name: 'Home',
      redirect: '/dashboard',
      component: () => import('../views/Layout'),
      children: [
        {
          path: '/dashboard',
          name: 'Dashboard',
          component: () => import('../views/Dashboard')
        },
        {
          path: '/booking',
          name: 'Booking',
          component: () => import('../views/Booking')
        },
        {
          path: '/booking/detail',
          name: 'Booking Detail',
          component: () => import('../views/Booking/src/components/BookingDetail'),
          meta: {
            activeMenu: '/booking'
          }
        },
        {
          path: '/tracking',
          name: 'Tracking',
          component: () => import('../views/Tracking')
        },
        {
          path: '/tracking/detail',
          name: 'Tracking Detail',
          component: () => import('../views/Tracking/src/components/TrackingDetail'),
          meta: {
            activeMenu: '/tracking'
          }
        },
        {
          path: '/shipment/detail',
          name: 'Shipment Detail',
          component: () => import('../views/Tracking/src/components/TrackingDetail'),
          meta: {
            activeMenu: '/tracking'
          }
        },
        {
          path: '/tracking/add-vgm',
          name: 'Add VGM',
          component: () =>
            import('../views/Tracking/src/components/TrackingTable/src/components/VGMView.vue'),
          meta: {
            activeMenu: '/tracking'
          }
        },
        {
          path: '/public-tracking',
          name: 'Public Tracking',
          component: () => import('../views/Tracking/src/components/PublicTracking'),
          meta: {
            activeMenu: '/tracking'
          }
        },
        {
          path: '/public-tracking/detail',
          name: 'Public Tracking Detail',
          component: () =>
            import(
              '../views/Tracking/src/components/PublicTracking/src/components/PublicTrackingDetail.vue'
            ),
          meta: {
            activeMenu: '/tracking'
          }
        },
        {
          path: '/login',
          name: 'Login',
          component: () => import('../views/Login'),
          meta: {
            activeMenu: '/tracking'
          }
        },
        {
          path: '/reset-password',
          name: 'Reset Password',
          component: () => import('../views/Login/src/components/ChangePasswordCard.vue')
        },
        {
          path: '/Operationlog',
          name: 'Operationlog',
          component: () => import('../views/OperationLog')
        },
        {
          path: '/chat-log',
          name: 'Chat Log',
          component: () => import('../views/ChatLog')
        },
        {
          path: '/ai-api-log',
          name: 'AI API Log',
          component: () => import('../views/AIApiLog')
        },
        {
          path: '/PromptConfiguration',
          name: 'PromptConfiguration',
          component: () => import('../views/PromptConfiguration')
        },
        {
          path: '/system-message',
          name: 'System Message',
          component: () => import('../views/SystemMessage')
        },
        {
          path: '/system-message-detail',
          name: 'System Message Detail',
          meta: {
            breadName: 'Detail',
            activeMenu: '/system-message'
          },
          component: () => import('../views/SystemMessage/src/components/SystemMessageDetail.vue')
        },
        {
          path: '/SystemSettings',
          name: 'Monitoring Settings',
          component: () => import('../views/SystemSettings')
        },
        {
          path: '/SystemSettings',
          name: 'System Settings',
          component: () => import('../views/SystemSettings')
        },
        {
          path: '/SystemSettings/createnewrule',
          name: 'Create New Rule',
          component: () => import('../views/SystemSettings/src/components/CreateNewrule'),
          meta: {
            activeMenu: '/SystemSettings'
          }
        }
      ]
    }
  ]
})

// * 路由拦截 beforeEach
router.beforeEach(async (to, from, next) => {
  useBreadCrumb().setRouteList(to)
  const userStore = useUserStore()
  // 如果手动跳转登录页，清除登录信息
  if (to.path === '/login') {
    if (userStore.isLogin) {
      await userStore.logout()
    }
    sessionStorage.removeItem('trackingTablePageInfo')
    sessionStorage.removeItem('bookingTablePageInfo')
  }

  // 判断是否从systemMessage详情页跳转到systemMessage列表页，或者从systemMessage列表页跳转到systemMessage详情页
  if (
    !(
      from.name === 'System Message Detail' ||
      from.name === 'System Message' ||
      !from.name ||
      from.name === 'Tracking Detail'
    ) ||
    !(
      to.name === 'System Message' ||
      to.name === 'System Message Detail' ||
      to.name === 'Tracking Detail'
    )
  ) {
    sessionStorage.removeItem('activeCardTypeName')
  }

  // 未登录白名单
  const whiteList = ['/login', '/public-tracking', '/public-tracking/detail', '/reset-password']
  // 判断是否登录
  if (!whiteList.includes(to.path) && !userStore.isLogin) {
    const userStore = useUserStore()
    await userStore.logout()
    if (whiteList.includes(from.path)) {
      ElMessage.warning({
        message: 'Please log in to use this feature.',
        grouping: true
      })
      next(false)
      return
    } else {
      next('/login')
    }
  }
  next()
})

export default router
