import React, { useState } from 'react';
import { Upload, Button, message, UploadFile, UploadProps } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
const apiBaseUrl = import.meta.env.VITE_API_BASE_URL;
// 音频文件上传组件
  const AudioUploader: React.FC<{
    onOk: ()=> void; 
  }> = ({ onOk }) => {
  // 上传状态管理
  const [uploading, setUploading] = useState<boolean>(false);
  
  // 允许的文件类型
  const ALLOWED_FILE_TYPES = ['audio/mp3', 'audio/mpeg', 'audio/wav', 'audio/x-wav', 'audio/x-pn-wav'];
  const ALLOWED_EXTENSIONS = ['.mp3', '.wav'];
  // 最大文件大小：100MB（与后端保持一致）
  const MAX_FILE_SIZE = 100 * 1024 * 1024;

  // 自定义上传逻辑
  const handleUpload: UploadProps['customRequest'] = async ({ file, onSuccess, onError }) => {
    setUploading(true);
    try {
      // 创建 FormData
      const formData = new FormData();
      formData.append('audio', file); // 与后端接收的参数名保持一致

      // 发送请求到 Go 后端
      const response = await fetch(apiBaseUrl+'/audioencode/upload', {
        method: 'POST',
        body: formData,
        headers: {
          // 不要手动设置 Content-Type，浏览器会自动生成 multipart/form-data 及边界符
        },
      });

      const result = await response.json();

      if (response.ok) {
        onOk();
        // onSuccess(result, file);
        message.success(`上传成功`);
      } else {
        throw new Error(result.msg || '上传失败');
      }
    } catch (error) {
      const errMsg = error instanceof Error ? error.message : '上传出错';
      // onError(new Error(errMsg), file);
      message.error(`上传失败：${errMsg}`);
    } finally {
      setUploading(false);
    }
  };

  // 文件上传前的校验
  const beforeUpload = (file: UploadFile) => {
    // 1. 校验文件大小
    if (file.size > MAX_FILE_SIZE) {
      message.error(`文件大小不能超过 100MB，当前文件：${file.name}`);
      return false;
    }

    // 2. 校验文件类型（双重校验：扩展名 + MIME 类型）
    const fileName = file.name.toLowerCase();
    const fileExt = fileName.slice(fileName.lastIndexOf('.'));
    
    // 扩展名校验
    if (!ALLOWED_EXTENSIONS.includes(fileExt)) {
      message.error(`仅支持上传 MP3/WAV 格式文件，当前文件：${file.name}`);
      return false;
    }

    // MIME 类型校验
    if (!ALLOWED_FILE_TYPES.includes(file.type)) {
      message.warning(`文件类型检测异常，建议检查文件是否为标准 MP3/WAV 格式`);
      // 这里不直接返回 false，避免部分浏览器 MIME 类型识别不准确导致正常文件被拦截
      // 最终由后端做最终校验
    }

    return true;
  };

  return (
    <Upload
      name="audio"
      customRequest={handleUpload}
      beforeUpload={beforeUpload}
      showUploadList={false}
      multiple={false} // 禁用多文件上传，如需支持可改为 true
      disabled={uploading}
    >
      <Button 
        type="primary" 
        icon={<UploadOutlined />} 
        loading={uploading}
      >
        {uploading ? '上传中...' : '选择音频文件（MP3/WAV）'}
      </Button>
    </Upload>
  );
};

// 导出组件供其他模块使用
export default AudioUploader;