import Header from '../../components/Header';
import React, { useState } from 'react';
import './NewUserGuide.css';

const NewUserGuide = () => {
  const [activeTab, setActiveTab] = useState('terms');

  const renderContent = () => {
    switch (activeTab) {
      case 'terms':
        return (
          <div className="guide-content">
            <h2>名词解释</h2>
            <p>在本平台中，我们使用以下术语：</p>
            <ul>
              <li><strong>种子：</strong> 表示可下载的资源文件索引信息。</li>
              <li><strong>做种：</strong> 指上传资源供他人下载。</li>
              <li><strong>分享率：</strong> 上传流量与下载流量的比值。</li>
              <li><strong>魔力值：</strong> 用于奖励活跃用户的虚拟积分。</li>
              {/* 可继续添加名词 */}
            </ul>
          </div>
        );
      case 'tutorial':
        return (
          <div className="guide-content">
            <h2>详细教程</h2>
            <ol>
              <li>注册并完善个人资料</li>
              <li>浏览并下载感兴趣的种子资源</li>
              <li>做种、评论、评分获得积分</li>
              <li>发布你的第一个种子</li>
              {/* 可继续扩展详细步骤 */}
            </ol>
          </div>
        );
      case 'tasks':
        return (
          <div className="guide-content">
            <h2>成长任务</h2>
            <p>完成以下任务可快速熟悉平台并获得奖励：</p>
            <ul>
              <li>🎯 浏览任意种子页面</li>
              <li>🗣️ 在论坛发一条评论</li>
              <li>📤 上传你的第一个资源</li>
              <li>🌟 连续登录 3 天</li>
            </ul>
          </div>
        );
      default:
        return null;
    }
  };

  return (
    <div className="new-user-guide-page">
      <Header />
      <div className="guide-container">
        <div className="guide-nav">
          <button
            className={activeTab === 'terms' ? 'active' : ''}
            onClick={() => setActiveTab('terms')}
          >
            名词解释
          </button>
          <button
            className={activeTab === 'tutorial' ? 'active' : ''}
            onClick={() => setActiveTab('tutorial')}
          >
            详细教程
          </button>
          <button
            className={activeTab === 'tasks' ? 'active' : ''}
            onClick={() => setActiveTab('tasks')}
          >
            成长任务
          </button>
        </div>
        <div className="guide-main">{renderContent()}</div>
      </div>
    </div>
  );
};

export default NewUserGuide;
