import type { MockMethod } from 'vite-plugin-mock'
import { Request, Response } from '../_util'
import { createFakeUserList } from './user'

// single
const dashboardRoute = {
    path: '/dashboard',
    name: 'Dashboard',
    component: 'LAYOUT',
    redirect: '/dashboard/workbench',
    meta: {
        title: 'routes.dashboard.dashboard',
        hideChildrenInMenu: true,
        icon: 'bx:bx-home',
    },
    children: [
        {
            path: 'workbench',
            name: 'Workbench',
            component: '/dashboard/workbench/index',
            meta: {
                hideMenu: true,
                hideBreadcrumb: true,
                title: 'routes.dashboard.workbench',
                currentActiveMenu: '/dashboard',
                icon: 'bx:bx-home',
            },
        },
    ],
}

const backRoute = {
    path: 'back',
    name: 'PermissionBackDemo',
    meta: {
        title: 'routes.demo.permission.back',
    },

    children: [
        {
            path: 'page',
            name: 'BackAuthPage',
            component: '/demo/permission/back/index',
            meta: {
                title: 'routes.demo.permission.backPage',
            },
        },
        {
            path: 'btn',
            name: 'BackAuthBtn',
            component: '/demo/permission/back/Btn',
            meta: {
                title: 'routes.demo.permission.backBtn',
            },
        },
    ],
}

const authRoute = {
    path: '/permission',
    name: 'Permission',
    component: 'LAYOUT',
    redirect: '/permission/front/page',
    meta: {
        icon: 'carbon:user-role',
        title: 'routes.demo.permission.permission',
    },
    children: [backRoute],
}

const levelRoute = {
    path: '/level',
    name: 'Level',
    component: 'LAYOUT',
    redirect: '/level/menu1/menu1-1',
    meta: {
        icon: 'carbon:user-role',
        title: 'routes.demo.level.level',
    },

    children: [
        {
            path: 'menu1',
            name: 'Menu1Demo',
            meta: {
                title: 'Menu1',
            },
            children: [
                {
                    path: 'menu1-1',
                    name: 'Menu11Demo',
                    meta: {
                        title: 'Menu1-1',
                    },
                    children: [
                        {
                            path: 'menu1-1-1',
                            name: 'Menu111Demo',
                            component: '/demo/level/Menu111',
                            meta: {
                                title: 'Menu111',
                            },
                        },
                    ],
                },
                {
                    path: 'menu1-2',
                    name: 'Menu12Demo',
                    component: '/demo/level/Menu12',
                    meta: {
                        title: 'Menu1-2',
                    },
                },
            ],
        },
        {
            path: 'menu2',
            name: 'Menu2Demo',
            component: '/demo/level/Menu2',
            meta: {
                title: 'Menu2',
            },
        },
    ],
}

const sysRoute = {
    path: '/system',
    name: 'System',
    component: 'LAYOUT',
    redirect: '/system/account',
    meta: {
        icon: 'ion:settings-outline',
        title: 'routes.demo.system.moduleName',
    },
    children: [
        {
            path: 'account',
            name: 'AccountManagement',
            meta: {
                title: 'routes.demo.system.account',
                ignoreKeepAlive: true,
            },
            component: '/demo/system/account/index',
        },
        {
            path: 'account_detail/:id',
            name: 'AccountDetail',
            meta: {
                hideMenu: true,
                title: 'routes.demo.system.account_detail',
                ignoreKeepAlive: true,
                showMenu: false,
                currentActiveMenu: '/system/account',
            },
            component: '/demo/system/account/AccountDetail',
        },
        {
            path: 'role',
            name: 'RoleManagement',
            meta: {
                title: 'routes.demo.system.role',
                ignoreKeepAlive: true,
            },
            component: '/demo/system/role/index',
        },

        {
            path: 'menu',
            name: 'MenuManagement',
            meta: {
                title: 'routes.demo.system.menu',
                ignoreKeepAlive: true,
            },
            component: '/demo/system/menu/index',
        },
        {
            path: 'dept',
            name: 'DeptManagement',
            meta: {
                title: 'routes.demo.system.dept',
                ignoreKeepAlive: true,
            },
            component: '/demo/system/dept/index',
        },
        {
            path: 'changePassword',
            name: 'ChangePassword',
            meta: {
                title: 'routes.demo.system.password',
                ignoreKeepAlive: true,
            },
            component: '/demo/system/password/index',
        },
    ],
}

const linkRoute = {
    path: '/link',
    name: 'Link',
    component: 'LAYOUT',
    meta: {
        icon: 'ion:tv-outline',
        title: 'routes.demo.iframe.frame',
    },
    children: [
        {
            path: 'doc',
            name: 'Doc',
            meta: {
                title: 'routes.demo.iframe.doc',
                frameSrc: 'https://vvbin.cn/doc-next/',
            },
        },
        {
            path: 'https://vvbin.cn/doc-next/',
            name: 'DocExternal',
            component: 'LAYOUT',
            meta: {
                title: 'routes.demo.iframe.docExternal',
            },
        },
    ],
}

export default [
    {
        url: '/basic-api/user/getMenuList',
        timeout: 1000,
        method: 'get',
        response: (request: Request) => {
            const token = Request.getRequestToken(request)
            if (!token) {
                return Response.no('Invalid token!')
            }
            const checkUser = createFakeUserList().find((item) => item.token === token)
            if (!checkUser) {
                return Response.no('Invalid user token!')
            }
            const id = checkUser.userId
            let menu: Object[]
            switch (id) {
                case '1':
                    dashboardRoute.redirect = `${dashboardRoute.path}/${dashboardRoute.children[0].path}`
                    menu = [dashboardRoute, authRoute, levelRoute, sysRoute, linkRoute]
                    break
                case '2':
                    dashboardRoute.redirect = `${dashboardRoute.path}/${dashboardRoute.children[1].path}`
                    menu = [dashboardRoute, authRoute, levelRoute, linkRoute]
                    break
                default:
                    menu = []
            }

            return Response.ok(menu)
        },
    },
] as MockMethod[]
