<template>
  <div class="upload-page">
    <div class="page-header">
      <h1>上传种子</h1>
      <p class="page-description">分享你的资源，为社区做贡献</p>
    </div>

    <div class="upload-form">
      <el-form
        ref="uploadFormRef"
        :model="uploadForm"
        :rules="formRules"
        label-width="120px"
        size="large"
      >
        <!-- 种子文件上传 -->
        <el-form-item label="种子文件" prop="torrentFile" required>
          <el-upload
            ref="torrentUploadRef"
            :auto-upload="false"
            :limit="1"
            accept=".torrent"
            :on-change="handleTorrentChange"
            :on-remove="handleTorrentRemove"
            :before-upload="beforeTorrentUpload"
            drag
            class="torrent-upload"
          >
            <el-icon class="el-icon--upload"><UploadFilled /></el-icon>
            <div class="el-upload__text">
              将 .torrent 文件拖到此处，或<em>点击上传</em>
            </div>
            <template #tip>
              <div class="el-upload__tip">
                只能上传 .torrent 文件，且不超过 10MB
              </div>
            </template>
          </el-upload>
        </el-form-item>

        <!-- 基本信息 -->
        <el-form-item label="资源标题" prop="title" required>
          <el-input
            v-model="uploadForm.title"
            placeholder="请输入资源标题"
            maxlength="200"
            show-word-limit
          />
        </el-form-item>

        <el-form-item label="资源分类" prop="category" required>
          <el-select v-model="uploadForm.category" placeholder="请选择分类">
            <el-option label="电影" value="movie" />
            <el-option label="电视剧" value="tv" />
            <el-option label="音乐" value="music" />
            <el-option label="软件" value="software" />
            <el-option label="游戏" value="game" />
            <el-option label="电子书" value="ebook" />
            <el-option label="其他" value="other" />
          </el-select>
        </el-form-item>

        <el-form-item label="子分类" prop="subcategory">
          <el-select v-model="uploadForm.subcategory" placeholder="请选择子分类">
            <el-option
              v-for="sub in getSubcategories(uploadForm.category)"
              :key="sub.value"
              :label="sub.label"
              :value="sub.value"
            />
          </el-select>
        </el-form-item>

        <!-- 详细描述 -->
        <el-form-item label="资源描述" prop="description">
          <el-input
            v-model="uploadForm.description"
            type="textarea"
            :rows="6"
            placeholder="请详细描述资源内容，包括格式、质量、语言等信息"
            maxlength="2000"
            show-word-limit
          />
        </el-form-item>

        <!-- 标签 -->
        <el-form-item label="标签">
          <div class="tags-input">
            <el-tag
              v-for="tag in uploadForm.tags"
              :key="tag"
              closable
              @close="removeTag(tag)"
              class="tag-item"
            >
              {{ tag }}
            </el-tag>
            <el-input
              v-if="tagInputVisible"
              ref="tagInputRef"
              v-model="tagInputValue"
              size="small"
              @keyup.enter="addTag"
              @blur="addTag"
              class="tag-input"
            />
            <el-button
              v-else
              size="small"
              @click="showTagInput"
              class="add-tag-btn"
            >
              + 添加标签
            </el-button>
          </div>
        </el-form-item>

        <!-- 封面图片 -->
        <el-form-item label="封面图片">
          <el-upload
            ref="imageUploadRef"
            :auto-upload="false"
            :limit="1"
            accept="image/*"
            :on-change="handleImageChange"
            :on-remove="handleImageRemove"
            list-type="picture-card"
            class="image-upload"
          >
            <el-icon><Plus /></el-icon>
            <template #tip>
              <div class="el-upload__tip">
                支持 JPG、PNG 格式，建议尺寸 300x400，不超过 5MB
              </div>
            </template>
          </el-upload>
        </el-form-item>

        <!-- 高级选项 -->
        <el-form-item>
          <el-collapse>
            <el-collapse-item title="高级选项" name="advanced">
              <el-form-item label="免费时间">
                <el-select v-model="uploadForm.freeTime" placeholder="选择免费时间">
                  <el-option label="永久免费" value="forever" />
                  <el-option label="24小时" value="24h" />
                  <el-option label="48小时" value="48h" />
                  <el-option label="7天" value="7d" />
                  <el-option label="30天" value="30d" />
                </el-select>
              </el-form-item>

              <el-form-item label="匿名上传">
                <el-switch v-model="uploadForm.anonymous" />
                <span class="form-tip">开启后将不显示上传者信息</span>
              </el-form-item>

              <el-form-item label="允许HR">
                <el-switch v-model="uploadForm.allowHR" />
                <span class="form-tip">允许此种子参与HR考核</span>
              </el-form-item>
            </el-collapse-item>
          </el-collapse>
        </el-form-item>

        <!-- 提交按钮 -->
        <el-form-item>
          <div class="submit-buttons">
            <el-button @click="resetForm">重置</el-button>
            <el-button type="primary" @click="submitForm" :loading="uploading">
              {{ uploading ? '上传中...' : '提交种子' }}
            </el-button>
          </div>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>

<script>
import { ref, reactive, nextTick } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import {
  UploadFilled,
  Plus
} from '@element-plus/icons-vue'

export default {
  name: 'UploadView',
  setup() {
    const router = useRouter()
    const uploadFormRef = ref(null)
    const torrentUploadRef = ref(null)
    const imageUploadRef = ref(null)
    const tagInputRef = ref(null)
    
    const uploading = ref(false)
    const tagInputVisible = ref(false)
    const tagInputValue = ref('')
    
    const uploadForm = reactive({
      torrentFile: null,
      title: '',
      category: '',
      subcategory: '',
      description: '',
      tags: [],
      coverImage: null,
      freeTime: '',
      anonymous: false,
      allowHR: true
    })
    
    const formRules = {
      title: [
        { required: true, message: '请输入资源标题', trigger: 'blur' },
        { min: 5, max: 200, message: '标题长度在 5 到 200 个字符', trigger: 'blur' }
      ],
      category: [
        { required: true, message: '请选择资源分类', trigger: 'change' }
      ],
      description: [
        { min: 10, max: 2000, message: '描述长度在 10 到 2000 个字符', trigger: 'blur' }
      ]
    }
    
    const subcategories = {
      movie: [
        { label: '动作片', value: 'action' },
        { label: '喜剧片', value: 'comedy' },
        { label: '科幻片', value: 'scifi' },
        { label: '恐怖片', value: 'horror' },
        { label: '剧情片', value: 'drama' }
      ],
      tv: [
        { label: '美剧', value: 'us' },
        { label: '国产剧', value: 'cn' },
        { label: '日韩剧', value: 'asia' },
        { label: '英剧', value: 'uk' },
        { label: '纪录片', value: 'documentary' }
      ],
      music: [
        { label: '流行音乐', value: 'pop' },
        { label: '古典音乐', value: 'classical' },
        { label: '摇滚音乐', value: 'rock' },
        { label: '电子音乐', value: 'electronic' },
        { label: '其他', value: 'other' }
      ],
      software: [
        { label: '操作系统', value: 'os' },
        { label: '办公软件', value: 'office' },
        { label: '开发工具', value: 'dev' },
        { label: '设计软件', value: 'design' },
        { label: '其他', value: 'other' }
      ],
      game: [
        { label: 'PC游戏', value: 'pc' },
        { label: '主机游戏', value: 'console' },
        { label: '手机游戏', value: 'mobile' },
        { label: '其他', value: 'other' }
      ]
    }
    
    const getSubcategories = (category) => {
      return subcategories[category] || []
    }
    
    const handleTorrentChange = (file) => {
      uploadForm.torrentFile = file.raw
      // 这里可以解析torrent文件获取基本信息
      parseTorrentFile(file.raw)
    }
    
    const handleTorrentRemove = () => {
      uploadForm.torrentFile = null
    }
    
    const beforeTorrentUpload = (file) => {
      const isTorrent = file.type === 'application/x-bittorrent' || file.name.endsWith('.torrent')
      const isLt10M = file.size / 1024 / 1024 < 10
      
      if (!isTorrent) {
        ElMessage.error('只能上传 .torrent 文件!')
        return false
      }
      if (!isLt10M) {
        ElMessage.error('种子文件大小不能超过 10MB!')
        return false
      }
      return true
    }
    
    const parseTorrentFile = (file) => {
      // 这里应该实现torrent文件解析
      // 可以使用 parse-torrent 库
      console.log('解析种子文件:', file.name)
      
      // 模拟解析结果自动填入表单
      if (!uploadForm.title) {
        uploadForm.title = file.name.replace('.torrent', '')
      }
    }
    
    const handleImageChange = (file) => {
      uploadForm.coverImage = file.raw
    }
    
    const handleImageRemove = () => {
      uploadForm.coverImage = null
    }
    
    const showTagInput = () => {
      tagInputVisible.value = true
      nextTick(() => {
        tagInputRef.value?.focus()
      })
    }
    
    const addTag = () => {
      const tag = tagInputValue.value.trim()
      if (tag && !uploadForm.tags.includes(tag)) {
        uploadForm.tags.push(tag)
      }
      tagInputVisible.value = false
      tagInputValue.value = ''
    }
    
    const removeTag = (tag) => {
      const index = uploadForm.tags.indexOf(tag)
      if (index > -1) {
        uploadForm.tags.splice(index, 1)
      }
    }
    
    const submitForm = async () => {
      if (!uploadForm.torrentFile) {
        ElMessage.error('请上传种子文件')
        return
      }
      
      try {
        await uploadFormRef.value?.validate()
        
        uploading.value = true
        
        // 模拟上传过程
        await new Promise(resolve => setTimeout(resolve, 2000))
        
        ElMessage.success('种子上传成功!')
        router.push('/torrents')
        
      } catch (error) {
        console.error('表单验证失败:', error)
      } finally {
        uploading.value = false
      }
    }
    
    const resetForm = () => {
      uploadFormRef.value?.resetFields()
      uploadForm.torrentFile = null
      uploadForm.coverImage = null
      uploadForm.tags = []
      torrentUploadRef.value?.clearFiles()
      imageUploadRef.value?.clearFiles()
    }
    
    return {
      uploadFormRef,
      torrentUploadRef,
      imageUploadRef,
      tagInputRef,
      uploading,
      tagInputVisible,
      tagInputValue,
      uploadForm,
      formRules,
      getSubcategories,
      handleTorrentChange,
      handleTorrentRemove,
      beforeTorrentUpload,
      handleImageChange,
      handleImageRemove,
      showTagInput,
      addTag,
      removeTag,
      submitForm,
      resetForm,
      UploadFilled,
      Plus
    }
  }
}
</script>

<style lang="scss" scoped>
.upload-page {
  max-width: 800px;
  margin: 0 auto;
  padding: 24px;
}

.page-header {
  text-align: center;
  margin-bottom: 32px;
  
  h1 {
    font-size: 28px;
    font-weight: 600;
    color: #2c3e50;
    margin: 0 0 8px 0;
  }
  
  .page-description {
    font-size: 16px;
    color: #7f8c8d;
    margin: 0;
  }
}

.upload-form {
  background: #fff;
  border-radius: 12px;
  padding: 32px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
  
  .torrent-upload {
    width: 100%;
    
    :deep(.el-upload-dragger) {
      width: 100%;
      height: 180px;
      border: 2px dashed #d9d9d9;
      border-radius: 8px;
      
      &:hover {
        border-color: #409eff;
      }
    }
  }
  
  .tags-input {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
    
    .tag-item {
      margin: 0;
    }
    
    .tag-input {
      width: 100px;
    }
    
    .add-tag-btn {
      border: 1px dashed #d9d9d9;
      color: #999;
      
      &:hover {
        border-color: #409eff;
        color: #409eff;
      }
    }
  }
  
  .image-upload {
    :deep(.el-upload--picture-card) {
      width: 148px;
      height: 148px;
    }
  }
  
  .form-tip {
    margin-left: 8px;
    font-size: 12px;
    color: #909399;
  }
  
  .submit-buttons {
    display: flex;
    gap: 16px;
    justify-content: center;
    margin-top: 24px;
  }
}

@media (max-width: 768px) {
  .upload-page {
    padding: 16px;
  }
  
  .upload-form {
    padding: 24px 16px;
  }
  
  .submit-buttons {
    flex-direction: column;
    
    .el-button {
      width: 100%;
    }
  }
}
</style>