import React, { useState } from 'react';
import './App.css';
import './PublishPage.css';

const PublishPage = () => {
  const [formData, setFormData] = useState({
    type: '',
    torrentFile: '',
    title: '',
    subtitle: ''
  });

  const handleChange = (e) => {
    const { name, value } = e.target;
    setFormData({ ...formData, [name]: value });
  };

  const handleFileChange = (e) => {
    const file = e.target.files[0];
    if (file && file.name.split('.').pop() !== 'torrent') {
      alert('仅能上传.torrent类型文件');
      e.target.value = null; // Clear the input
    } else {
      setFormData({ ...formData, torrentFile: file });
    }
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log('Form Data Submitted:', formData);
  };

  return (
    <div className="publish-page">
      <h1 className="page-title">发布种子</h1>
      <form onSubmit={handleSubmit} className="publish-form">
        <div className="form-row">
          <label htmlFor="type">类型</label>
          <select name="type" id="type" value={formData.type} onChange={handleChange} required>
            <option value="">请选择类型</option>
            <option value="电影">电影</option>
            <option value="剧集">剧集</option>
            <option value="音乐">音乐</option>
            <option value="动漫">动漫</option>
            <option value="游戏">游戏</option>
            <option value="体育">体育</option>
            <option value="资料">资料</option>
          </select>
        </div>

        <div className="form-row">
          <label htmlFor="torrentFile">种子文件</label>
          <input
            type="file"
            id="torrentFile"
            name="torrentFile"
            onChange={handleFileChange}
            required
          />
          <span style={{ fontSize: '12px', color: '#666' }}>需上传.torrent类型文件</span>
        </div>

        <div className="form-row">
          <label htmlFor="title">标题</label>
          <input
            type="text"
            id="title"
            name="title"
            value={formData.title}
            onChange={handleChange}
            required
          />
        </div>

        <div className="form-row">
          <label htmlFor="subtitle">种子简介</label>
          <input
            type="text"
            id="subtitle"
            name="subtitle"
            value={formData.subtitle}
            onChange={handleChange}
          />
        </div>

        <div className="form-row submit-row">
          <button type="submit" className="submit-button">提交</button>
        </div>
      </form>
    </div>
  );
};

export default PublishPage;