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 UserProfile = () => {
  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;
