import React from "react";
import { Layout, Menu, Avatar, Dropdown } from "antd";
import {
  UserOutlined,
  LogoutOutlined,
  HomeOutlined,
  AppstoreOutlined,
  SettingOutlined,
  CommentOutlined,
  CloudDownloadOutlined,
  UploadOutlined,
} from "@ant-design/icons";
import { useNavigate, Link, useLocation } from "react-router-dom";
import { useAuth } from "../features/auth/contexts/AuthContext";

const { Header, Content, Footer } = Layout;

// 路径与菜单key的映射
const pathToMenuKey = {
  "/": "1",
  "/forum": "2",
  "/pt": "3",
  "/torrents": "4",
  "/upload": "5",
  "/tools": "6",
  "/admin": "7",
  "/profile": "profile",
};

const MainLayout = ({ children }) => {
  const { user, logout, hasRole } = useAuth();
  const location = useLocation();

  // 根据当前路径获取对应的菜单key
  const getSelectedKey = () => {
    const path = location.pathname;
    return pathToMenuKey[path] || "1"; // 默认选中首页
  };

  const handleLogout = async () => {
    await logout(); // logout 函数内已有消息提示和导航逻辑
  };

  // 用户菜单项
  const userMenuItems = [
    {
      key: "profile",
      icon: <UserOutlined />,
      label: <Link to="/profile">个人资料</Link>,
    },
    {
      type: "divider",
    },
    {
      key: "logout",
      icon: <LogoutOutlined />,
      label: "退出登录",
      onClick: handleLogout,
    },
  ];

  // 主导航菜单项
  const menuItems = [
    {
      key: "1",
      icon: <HomeOutlined />,
      label: <Link to="/">首页</Link>,
    },
    {
      key: "2",
      icon: <CommentOutlined />,
      label: <Link to="/forum">论坛</Link>,
    },
    {
      key: "3",
      icon: <CloudDownloadOutlined />,
      label: <Link to="/pt">PT</Link>,
    },
    {
      key: "4",
      icon: <AppstoreOutlined />,
      label: <Link to="/torrents">种子列表</Link>,
    },
    {
      key: "5",
      icon: <UploadOutlined />,
      label: <Link to="/upload">发布种子</Link>,
    }
  ];

  // 如果用户是管理员，添加管理面板菜单项
  if (hasRole("admin")) {
    menuItems.push({
      key: "7",
      icon: <SettingOutlined />,
      label: <Link to="/admin">管理面板</Link>,
    });
  }

  return (
    <Layout className="min-h-screen">
      <Header className="flex items-center justify-between px-6">
        <div className="text-white text-xl font-bold">PT网站</div>
        <Menu
          theme="dark"
          mode="horizontal"
          selectedKeys={[getSelectedKey()]}
          className="flex-1 justify-center"
          style={{ maxWidth: "800px" }}
          overflowedIndicator={null}
          items={menuItems}
        />
        <div>
          <Dropdown menu={{ items: userMenuItems }} placement="bottomRight">
            <span className="flex items-center cursor-pointer text-white">
              <Avatar src={user?.avatar} icon={<UserOutlined />} />
              <span className="ml-2">{user?.username || "用户"}</span>
              {/* <span className="ml-1 text-xs opacity-80">
                ({user?.role || "游客"})
              </span> */}
            </span>
          </Dropdown>
        </div>
      </Header>
      <Content className="p-6">
        <div className="bg-white p-6 min-h-[280px] rounded">{children}</div>
      </Content>
      <Footer style={{ textAlign: "center" }}>
        PT网站 ©{new Date().getFullYear()} Created by G12-Team
      </Footer>
    </Layout>
  );
};

export default MainLayout;
