// import React, { useEffect, useState } from 'react';
// import { getExperience, updateExperience, checkUpgrade, upgradeUserLevel } from '../../api/level';
// import LevelCard from '../../components/LevelCard';

// const user_id = 1; // 实际项目中请从用户上下文获取

// const LevelPage = () => {
//   const [levelInfo, setLevelInfo] = useState(null);
//   const [upgradeStatus, setUpgradeStatus] = useState(null);
//   const [message, setMessage] = useState('');

//   const fetchExperience = async () => {
//     try {
//       const res = await getExperience(user_id);
//       setLevelInfo(res.data);
//     } catch (error) {
//       console.error(error);
//     }
//   };

//   const handleUpdate = async () => {
//     try {
//       const res = await updateExperience({ user_id, experience: 50, source: '签到' });
//       setMessage(res.data.message || '经验更新成功');
//       fetchExperience();
//     } catch (error) {
//       console.error(error);
//     }
//   };

//   const handleCheckUpgrade = async () => {
//     try {
//       const res = await checkUpgrade(user_id);
//       setUpgradeStatus(res.data);
//     } catch (error) {
//       console.error(error);
//     }
//   };

//   const handleUpgrade = async () => {
//     try {
//       const res = await upgradeUserLevel({ user_id, can_upgrade: true });
//       setMessage(res.data.message || '升级成功');
//       fetchExperience();
//     } catch (error) {
//       setMessage(error.response?.data?.message || '升级失败');
//     }
//   };

//   useEffect(() => {
//     fetchExperience();
//   }, []);

//   return (
//     <div className="max-w-xl mx-auto p-4">
//       <h1 className="text-2xl font-bold mb-4">我的等级</h1>
//       {levelInfo && (
//         <LevelCard
//           level={levelInfo.level}
//           current={levelInfo.current_experience}
//           next={levelInfo.next_level_experience}
//         />
//       )}

//       <div className="space-x-2 mb-4">
//         <button
//           onClick={handleUpdate}
//           className="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700"
//         >
//           模拟签到加经验
//         </button>
//         <button
//           onClick={handleCheckUpgrade}
//           className="px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700"
//         >
//           检查是否可升级
//         </button>
//       </div>

//       {upgradeStatus && (
//         <div className="mb-4">
//           {upgradeStatus.can_upgrade ? (
//             <button
//               onClick={handleUpgrade}
//               className="px-4 py-2 bg-purple-600 text-white rounded hover:bg-purple-700"
//             >
//               升级到下一级
//             </button>
//           ) : (
//             <p className="text-gray-700">当前还不能升级。</p>
//           )}
//         </div>
//       )}

//       {message && <div className="text-sm text-green-700 mt-2">{message}</div>}
//     </div>
//   );
// };

// export default LevelPage;
