// import React, { useState } from 'react';
// import './UserInvite.css';
// import axios from 'axios';
// import { useUser } from '../../context/UserContext'; // 根据实际路径调整

// const UserInvite = () => {
//   const { user } = useUser();
//   const [inviteCode, setInviteCode] = useState('');
//   const [loading, setLoading] = useState(false);

//   const handleGenerateInvite = async () => {
//     if (!user?.userId) {
//       alert('未获取到用户信息，无法生成邀请码');
//       return;
//     }

//     setLoading(true);
//     try {
//       const response = await axios.get('/echo/user/getInviteCode', {
//         params: { user_id: user.userId },
//       });
//       setInviteCode(response.data.invite_code);
//     } catch (error) {
//       console.error('生成邀请码失败：', error);
//       alert('生成邀请码失败，请稍后再试');
//     }
//     setLoading(false);
//   };

//   return (
//     <div className="user-invite-container">
//       <h2>邀请新用户</h2>
//       <button className="invite-button" onClick={handleGenerateInvite} disabled={loading}>
//         {loading ? '生成中...' : '生成邀请码'}
//       </button>
//       {inviteCode && (
//         <div className="invite-code">
//           邀请码：<span>{inviteCode}</span>
//         </div>
//       )}
//     </div>
//   );
// };

// export default UserInvite;

import React, { useState } from 'react';
import './UserInvite.css';
import axios from 'axios';
import { useUser } from '../../context/UserContext';

const UserInvite = () => {
  const { user } = useUser();
  const [inviteCode, setInviteCode] = useState('');
  const [loading, setLoading] = useState(false);

  const handleGenerateInvite = async () => {
    if (!user?.userId) {
      alert('未获取到用户信息，无法生成邀请码');
      return;
    }

    setLoading(true);
    try {
      const response = await axios.post('/echo/user/getInviteCode', {
        user_id: user.userId,
      });

      const data = response.data;

      if (data.status === 'success') {
        setInviteCode(data.invite_code);
      } else {
        alert(`生成失败：${data.message}`);
      }
    } catch (error) {
      console.error('生成邀请码失败：', error);
      alert('生成邀请码失败，请稍后再试');
    }
    setLoading(false);
  };

  return (
    <div className="user-invite-container">
      <h2>邀请新用户</h2>
      <button className="invite-button" onClick={handleGenerateInvite} disabled={loading}>
        {loading ? '生成中...' : '生成邀请码'}
      </button>
      {inviteCode && (
        <div className="invite-code">
          邀请码：<span>{inviteCode}</span>
        </div>
      )}
    </div>
  );
};

export default UserInvite;
