package com.zhentao.controller;

import com.zhentao.common.Result;
import com.zhentao.service.MinioService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * 通用文件上传控制器（使用MinIO存储）
 */
@Slf4j
@RestController
@RequestMapping("/admin/upload")
@CrossOrigin(origins = "*", maxAge = 3600)
public class UploadController {
    
    @Autowired
    private MinioService minioService;
    
    /**
     * 上传图片到MinIO
     */
    @PostMapping("/image")
    public Result<Map<String, String>> uploadImage(@RequestParam("file") MultipartFile file) {
        try {
            log.info("收到图片上传请求: {}", file.getOriginalFilename());
            
            if (file.isEmpty()) {
                return Result.error("上传文件不能为空");
            }
            
            // 检查文件类型
            String contentType = file.getContentType();
            if (contentType == null || !contentType.startsWith("image/")) {
                return Result.error("只能上传图片文件");
            }
            
            // 检查文件大小（最大10MB）
            if (file.getSize() > 10 * 1024 * 1024) {
                return Result.error("文件大小不能超过10MB");
            }
            
            // 上传到MinIO
            String imageUrl = minioService.uploadImage(file);
            
            // 返回访问URL
            Map<String, String> result = new HashMap<>();
            result.put("url", imageUrl);
            
            log.info("图片上传成功: {}", imageUrl);
            return Result.success(result);
            
        } catch (Exception e) {
            log.error("图片上传失败", e);
            return Result.error("上传失败：" + e.getMessage());
        }
    }
    
    /**
     * 上传文件到MinIO
     */
    @PostMapping("/file")
    public Result<Map<String, String>> uploadFile(@RequestParam("file") MultipartFile file) {
        try {
            log.info("收到文件上传请求: {}", file.getOriginalFilename());
            
            if (file.isEmpty()) {
                return Result.error("上传文件不能为空");
            }
            
            // 检查文件大小（最大100MB）
            if (file.getSize() > 100 * 1024 * 1024) {
                return Result.error("文件大小不能超过100MB");
            }
            
            // 上传到MinIO
            String fileUrl = minioService.uploadFile(file);
            
            // 返回访问URL
            Map<String, String> result = new HashMap<>();
            result.put("url", fileUrl);
            result.put("filename", file.getOriginalFilename());
            
            log.info("文件上传成功: {}", fileUrl);
            return Result.success(result);
            
        } catch (Exception e) {
            log.error("文件上传失败", e);
            return Result.error("上传失败：" + e.getMessage());
        }
    }
}

