import React, { ReactNode, useEffect, useState } from 'react';
import { Breadcrumb, Layout, Menu } from '@arco-design/web-react';
import {
  IconRobot, IconDashboard, IconIdcard,
} from '@arco-design/web-react/icon';
import './Home.css';
import {
  Link, Navigate, Outlet, useLocation, useNavigate,
} from 'react-router-dom';
import { useAppSelector } from '../app/hooks';
import { selectIsLogin } from '../features/auth/authSlice';
import { selectSiteConf } from '../features/globalConf/globalConfSlice';

export default function Home() {
  const location = useLocation();
  const navigate = useNavigate();
  const isLogin = useAppSelector(selectIsLogin);

  const path = location.pathname;
  useEffect(() => {
    if (path === '/home') {
      navigate('/home/groups');
    }

    if (path !== '/home/groups' && !path.startsWith('/home/groups/') && path !== '/home/weight') {
      navigate('/home/groups');
    }
    if (path === '/home/cookie') {
      navigate('/home/cookie');
    }
    if (path.startsWith('/home/cookie/')) {
      navigate(path);
    }
  }, [path]);

  let currentKey = '';
  if (path === '/home/groups') {
    currentKey = 'groups';
  } else if (path.startsWith('/home/groups/')) {
    currentKey = 'subs';
  } else if (path.startsWith('/home/cookie/')) {
    currentKey = path.substring(6);
  }

  const [selectedTab, changeSelectTab] = useState(currentKey);

  const handleTabSelect = (tab: string) => {
    changeSelectTab(tab);
    if (tab === 'groups') {
      navigate('/home/groups');
    } else if (tab === 'weight') {
      navigate('/home/weight');
    } else if (tab === 'cookie') {
      navigate('/home/cookie');
    } else if (tab.startsWith('cookie/')) {
      navigate(`/home/${tab}`);
    }
  };

  if (!isLogin) {
    return <Navigate to="/unauthed" />;
  }

  let breadcrumbContent: ReactNode;
  if (path === '/home/groups') {
    breadcrumbContent = (
      <Breadcrumb style={{ margin: '16px 0' }}>
        <Breadcrumb.Item>
          <IconRobot />
          订阅管理
        </Breadcrumb.Item>
      </Breadcrumb>
    );
  } else if (path.startsWith('/home/groups/')) {
    breadcrumbContent = (
      <Breadcrumb style={{ margin: '16px 0' }}>
        <Breadcrumb.Item>
          <Link to="/home/groups">
            <IconRobot />
            订阅管理
          </Link>
        </Breadcrumb.Item>
        <Breadcrumb.Item>
          群管理
        </Breadcrumb.Item>
      </Breadcrumb>
    );
  } else if (path === '/home/weight') {
    breadcrumbContent = (
      <Breadcrumb style={{ margin: '16px 0' }}>
        <Breadcrumb.Item>
          <IconDashboard />
          调度权重
        </Breadcrumb.Item>
      </Breadcrumb>
    );
  } else if (path.startsWith('/home/cookie')) {
    breadcrumbContent = (
      <Breadcrumb style={{ margin: '16px 0' }}>
        <Breadcrumb.Item>
          <Link to="/home/cookie">
            <IconIdcard />
            Cookie 管理
          </Link>
        </Breadcrumb.Item>
      </Breadcrumb>
    );
  }
  const MenuItem = Menu.Item;
  const { SubMenu } = Menu;
  const siteConf = useAppSelector(selectSiteConf);

  return (
    <Layout className="layout-collapse-demo">
      <Layout.Header>
        <span>
          Nonebot Bison
        </span>
      </Layout.Header>
      <Layout className="layout-collapse-demo">
        <Layout.Sider
          collapsible
          breakpoint="lg"
        >
          <Menu
            defaultSelectedKeys={[selectedTab]}
            onClickMenuItem={(key) => {
              handleTabSelect(key);
            }}
          >
            <Menu.Item key="groups">
              <IconRobot />
              订阅管理
            </Menu.Item>
            <SubMenu
              key="cookie"
              title={(
                <>
                  <IconIdcard />
                  Cookie 管理
                </>
              )}
            >
              {Object.values(siteConf).filter((site) => site.enable_cookie).map((site) => (
                <MenuItem key={`cookie/${site.name}`}>
                  {site.name}
                </MenuItem>
              ))}
            </SubMenu>
            <Menu.Item key="weight">
              <IconDashboard />
              调度权重
            </Menu.Item>
          </Menu>
        </Layout.Sider>
        <Layout.Content style={{ padding: '0 1em' }}>
          <Layout style={{ height: '100%' }}>
            {breadcrumbContent}
            <Layout.Content style={{ margin: '0.5em', padding: '2em' }}>
              <Outlet />
            </Layout.Content>
          </Layout>
        </Layout.Content>
      </Layout>
    </Layout>
  );
}