package com.zhentao.controller;

import com.zhentao.common.Result;
import com.zhentao.entity.Feedback;
import com.zhentao.service.FeedbackService;
import com.zhentao.util.FeedbackUploadUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

/**
 * 用户反馈控制器
 */
@RestController
@RequestMapping("/api/feedback")
public class FeedbackController {
    
    @Autowired
    private FeedbackService feedbackService;
    
    @Autowired
    private FeedbackUploadUtil feedbackUploadUtil;
    
    /**
     * 提交用户反馈
     * @param feedback 反馈信息
     * @return 提交结果
     */
    @PostMapping("/submit")
    public Result<Boolean> submitFeedback(@RequestBody Feedback feedback) {
        System.out.println("=== FeedbackController.submitFeedback 接收请求 ===");
        
        try {
            // 验证反馈信息
            if (feedback == null) {
                return Result.error("反馈信息不能为空");
            }
            
            System.out.println("接收到的反馈信息:");
            System.out.println("- 用户ID: " + feedback.getUserId());
            System.out.println("- 反馈类型: " + feedback.getFeedbackType());
            System.out.println("- 反馈内容: " + feedback.getContent());
            System.out.println("- 图片URL: " + feedback.getImageUrls());
            
            // 提交反馈
            Boolean success = feedbackService.submitFeedback(feedback);
            
            if (success) {
                System.out.println("✅ 反馈提交成功");
                return Result.success("反馈提交成功", true);
            } else {
                System.out.println("❌ 反馈提交失败");
                return Result.error("反馈提交失败");
            }
            
        } catch (RuntimeException e) {
            System.err.println("❌ RuntimeException: " + e.getMessage());
            e.printStackTrace();
            return Result.error(e.getMessage());
        } catch (Exception e) {
            System.err.println("❌ Exception: " + e.getMessage());
            e.printStackTrace();
            return Result.error("提交反馈失败: " + e.getMessage());
        }
    }
    
    /**
     * 健康检查接口
     * @return 服务状态
     */
    @GetMapping("/health")
    public Result<String> healthCheck() {
        try {
            return Result.success("Feedback服务运行正常", "healthy");
        } catch (Exception e) {
            return Result.error("服务异常: " + e.getMessage());
        }
    }
    
    /**
     * 上传反馈图片
     * @param file 图片文件
     * @return 上传结果，包含图片URL
     */
    @PostMapping("/upload")
    public Result<String> uploadFeedbackImage(@RequestParam("file") MultipartFile file) {
        System.out.println("=== 接收反馈图片上传请求 ===");
        System.out.println("文件名: " + file.getOriginalFilename());
        System.out.println("文件大小: " + file.getSize() + " bytes");
        
        try {
            // 1. 验证文件
            if (file.isEmpty()) {
                return Result.error("文件不能为空");
            }
            
            // 2. 验证文件类型
            String contentType = file.getContentType();
            if (contentType == null || !contentType.startsWith("image/")) {
                return Result.error("只能上传图片文件");
            }
            
            // 3. 验证文件大小（不超过5MB）
            long maxSize = 5 * 1024 * 1024; // 5MB
            if (file.getSize() > maxSize) {
                return Result.error("图片大小不能超过5MB");
            }
            
            // 4. 上传图片到MinIO
            try (InputStream inputStream = file.getInputStream()) {
                String imageUrl = feedbackUploadUtil.uploadFeedbackImage(inputStream, file.getOriginalFilename(), contentType);
                
                if (imageUrl != null) {
                    System.out.println("✅ 反馈图片上传成功！URL: " + imageUrl);
                    return Result.success("图片上传成功", imageUrl);
                } else {
                    System.err.println("❌ 上传到MinIO失败");
                    return Result.error("上传到MinIO失败");
                }
            }
            
        } catch (IOException e) {
            System.err.println("❌ 文件处理失败: " + e.getMessage());
            e.printStackTrace();
            return Result.error("文件处理失败: " + e.getMessage());
        } catch (Exception e) {
            System.err.println("❌ 上传失败: " + e.getMessage());
            e.printStackTrace();
            return Result.error("上传失败: " + e.getMessage());
        }
    }
}
