import React, { useState, useEffect } from 'react';
import { NavLink, Outlet } from 'react-router-dom';
import { Spin } from 'antd';
import { fetchUserList } from '../api/posts_trm';
import '../style/SuperAdmin.css';

export default function SuperAdmin() {
  const SUPERADMIN_USER_ID = 3;
  const [loading, setLoading] = useState(true);
  const [hasPermission, setHasPermission] = useState(true);

  useEffect(() => {
    async function check() {
      try {
        await fetchUserList(SUPERADMIN_USER_ID);
      } catch (e) {
        if (e.message === 'Unauthorized') {
          setHasPermission(false);
        } else {
          console.error(e);
        }
      } finally {
        setLoading(false);
      }
    }
    check();
  }, []);

  if (loading) return <Spin spinning tip="加载中…" style={{ width: '100%', marginTop: 100 }} />;
  if (!hasPermission) return <div style={{ textAlign: 'center', marginTop: 100 }}>权限不足</div>;

  return (
    <div className="super-admin-container">
      <aside className="super-admin-sidebar">
        <h2>超级管理员</h2>
        <nav>
          <ul>
            <li>
              <NavLink 
                to="users" 
                end 
                className={({ isActive }) => isActive ? 'active' : ''}
              >
                用户管理
              </NavLink>
            </li>
            <li>
              <NavLink 
                to="dashboard" 
                className={({ isActive }) => isActive ? 'active' : ''}
              >
                平台运行监控
              </NavLink>
            </li>
          </ul>
        </nav>
      </aside>

      <main className="super-admin-content">
        <Outlet />
      </main>
    </div>
  );
}