import React, { useState, useEffect } from 'react';
import '../style/Admin.css';

function UserManagement() {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    fetch('/api/users')
      .then(res => res.json())
      .then(data => setUsers(data))
      .catch(console.error);
  }, []);

  const handleUserAction = (id, action) => {
    fetch(`/api/users/${id}/${action}`, { method: 'POST' })
      .then(res => res.ok && setUsers(us => us.filter(u => u.id !== id)))
      .catch(console.error);
  };

  return (
    <div className="admin-container">
      <h2>用户管理</h2>
      <table className="admin-table">
        <thead>
          <tr><th>用户名</th><th>角色</th><th>操作</th></tr>
        </thead>
        <tbody>
          {users.map(u => (
            <tr key={u.id}>
              <td>{u.username}</td>
              <td>{u.role}</td>
              <td>
                <button onClick={() => handleUserAction(u.id, 'ban')}>封禁</button>
                <button onClick={() => handleUserAction(u.id, 'promote')}>提升权限</button>
              </td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  );
}

export default UserManagement;
