import React, { useEffect, useState } from 'react';
import axios from 'axios';
import './UserProfile.css';
import UserNav from './UserNav/UserNav'; // 导入 UserNav 组件


const API_BASE = process.env.REACT_APP_API_BASE;

const UserCenter = () => {
  const [userProfile, setUserProfile] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  // 假设用户ID为1，实际应用中应通过认证信息获取
  const userId = 1;

  useEffect(() => {
    // 获取用户个人资料
    const fetchUserProfile = async () => {
      try {
        setLoading(true);
        const response = await axios.get(`${API_BASE}/echo/user/profile`, {
          params: { user_id: userId }
        });

        if (response.data.status === 'success') {
          setUserProfile(response.data);
        } else {
          setError('用户不存在');
        }
      } catch (err) {
        setError('请求失败，请稍后再试');
      } finally {
        setLoading(false);
      }
    };

    fetchUserProfile();
  }, [userId]);

  if (loading) {
    return <p>加载中...</p>;
  }

  if (error) {
    return <p className="error">{error}</p>;
  }

  return (
    <div className="user-center">
        <div className="user-nav-container">
        <UserNav /> {/* 引入导航栏 */}
      </div>
      <div className="profile-header">
        <img
          src={userProfile.avatar_url}
          alt={userProfile.nickname}
          className="avatar"
        />
        <h1>{userProfile.nickname}</h1>
      </div>

      <div className="profile-details">
        <h2>个人资料</h2>
        <p><strong>邮箱：</strong>{userProfile.email}</p>
        <p><strong>性别：</strong>{userProfile.gender}</p>
        <p><strong>个人简介：</strong>{userProfile.bio}</p>
        <p><strong>兴趣：</strong>{userProfile.interests.join(', ')}</p>
        <p><strong>等级：</strong>{userProfile.level}</p>
        <p><strong>经验：</strong>{userProfile.experience}</p>
        <p><strong>上传量：</strong>{userProfile.upload_amount}</p>
        <p><strong>下载量：</strong>{userProfile.download_amount}</p>
        <p><strong>分享率：</strong>{(userProfile.share_rate * 100).toFixed(2)}%</p>
        <p><strong>VIP：</strong>{userProfile.is_vip ? '是' : '否'}</p>
        {userProfile.is_vip && <p><strong>VIP等级：</strong>{userProfile.vip_type}</p>}
        <p><strong>加入时间：</strong>{new Date(userProfile.joined_date).toLocaleDateString()}</p>
      </div>
    </div>
  );
};

export default UserProfile;
