package com.zhentao.controller;

import com.zhentao.utils.MinioUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.Map;

/**
 * 语音文件上传控制器
 */
@RestController
@RequestMapping("/api/voice")
@Slf4j
public class VoiceUploadController {

    @Autowired
    private MinioUtil minioUtil;

    /**
     * 上传语音文件
     *
     * @param file 语音文件
     * @return 文件URL和相关信息
     */
    @PostMapping("/upload")
    public ResponseEntity<Map<String, Object>> uploadVoice(@RequestParam("file") MultipartFile file) {
        Map<String, Object> result = new HashMap<>();
        
        try {
            // 验证文件
            if (file.isEmpty()) {
                result.put("success", false);
                result.put("message", "文件不能为空");
                return ResponseEntity.badRequest().body(result);
            }

            // 验证文件类型
            String originalFilename = file.getOriginalFilename();
            if (originalFilename == null || !isValidVoiceFile(originalFilename)) {
                result.put("success", false);
                result.put("message", "不支持的文件类型，仅支持 mp3, wav, ogg, m4a, amr, aac");
                return ResponseEntity.badRequest().body(result);
            }

            // 验证文件大小（最大10MB）
            long maxSize = 10 * 1024 * 1024;
            if (file.getSize() > maxSize) {
                result.put("success", false);
                result.put("message", "文件大小不能超过10MB");
                return ResponseEntity.badRequest().body(result);
            }

            // 上传到MinIO
            byte[] fileBytes = file.getBytes();
            String fileUrl = minioUtil.uploadVoiceFile(fileBytes, originalFilename);

            log.info("✅ 语音文件上传成功: {}, 大小: {} bytes", originalFilename, file.getSize());

            // 返回结果
            result.put("success", true);
            result.put("message", "上传成功");
            result.put("fileUrl", fileUrl);
            result.put("fileName", originalFilename);
            result.put("fileSize", file.getSize());
            
            return ResponseEntity.ok(result);

        } catch (Exception e) {
            log.error("❌ 语音文件上传失败: {}", e.getMessage(), e);
            result.put("success", false);
            result.put("message", "上传失败: " + e.getMessage());
            return ResponseEntity.status(500).body(result);
        }
    }

    /**
     * 验证是否为有效的语音文件
     *
     * @param filename 文件名
     * @return 是否有效
     */
    private boolean isValidVoiceFile(String filename) {
        String lowerFilename = filename.toLowerCase();
        return lowerFilename.endsWith(".mp3") ||
               lowerFilename.endsWith(".wav") ||
               lowerFilename.endsWith(".ogg") ||
               lowerFilename.endsWith(".m4a") ||
               lowerFilename.endsWith(".amr") ||
               lowerFilename.endsWith(".aac");
    }

    /**
     * 删除语音文件
     *
     * @param fileUrl 文件URL
     * @return 删除结果
     */
    @DeleteMapping("/delete")
    public ResponseEntity<Map<String, Object>> deleteVoice(@RequestParam("fileUrl") String fileUrl) {
        Map<String, Object> result = new HashMap<>();
        
        try {
            minioUtil.deleteFileByUrl(fileUrl);
            
            log.info("✅ 语音文件删除成功: {}", fileUrl);
            
            result.put("success", true);
            result.put("message", "删除成功");
            return ResponseEntity.ok(result);

        } catch (Exception e) {
            log.error("❌ 语音文件删除失败: {}", e.getMessage(), e);
            result.put("success", false);
            result.put("message", "删除失败: " + e.getMessage());
            return ResponseEntity.status(500).body(result);
        }
    }
}
