package com.ruoyi.web.controller.QRCode;

import com.google.zxing.WriterException;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.system.service.QRCodeGenerationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;

@RestController
public class QRCodeProcessingController {

    @Autowired
    private QRCodeGenerationService qrCodeGenerationService;

    @PostMapping("/QRCode/generateQRCode")
    public ResponseEntity<String> generateQRCode(@RequestParam String content) {
        try {
            // 获取上传路径（这里假设它是一个完整的目录路径）
            String uploadDirPath = RuoYiConfig.getUploadPath();

            // 生成一个唯一的文件名（这里只是简单示例，你可能需要更复杂的逻辑来避免文件名冲突）
            String fileName = "qrcode_" + System.currentTimeMillis() + ".png";

            // 拼接完整的文件路径
            String filePath = Paths.get(uploadDirPath, fileName).toString();

            // 注意：这里假设 qrCodeGenerationService.saveQRCodeImageToTempFile 返回的是原始 QR 码图片的临时路径
            // 但我们实际上不会使用这个路径来保存最终的图片，而是直接生成到 filePath
            // 如果你需要这个临时图片进行其他处理，可以先保留它，然后再删除
            // String qrCodeUrl = qrCodeGenerationService.saveQRCodeImageToTempFile(content); // 这行可以注释掉或删除

            // 直接生成 QR 码图片到 BufferedImage（这里需要修改 qrCodeGenerationService 或使用其他方式）
            // 假设有一个新方法可以直接返回 BufferedImage 而不是保存到文件
            String qrCodeUrl = qrCodeGenerationService.saveQRCodeImageToTempFile("content"); // 假设的新方法

            File qrCodeImageFile = new File(qrCodeUrl);
            BufferedImage qrCodeImage = ImageIO.read(qrCodeImageFile);

            // 在图像上添加文字
            Graphics2D g2d = qrCodeImage.createGraphics();
            g2d.setFont(new Font(content, Font.BOLD, 22)); // 使用标准字体名称
            g2d.setColor(Color.BLACK);
            int x = (qrCodeImage.getWidth() - g2d.getFontMetrics().stringWidth(content)) / 2;
            int y = qrCodeImage.getHeight() - 10;
            g2d.drawString(content, x, y);
            g2d.dispose();

            // 将修改后的图像保存到 filePath 指定的路径
            File outputFile = new File(filePath);
            ImageIO.write(qrCodeImage, "PNG", outputFile);

            // 返回新文件的路径
            return new ResponseEntity<>(filePath, HttpStatus.OK);
        } catch (IOException | WriterException e) {
            e.printStackTrace();
            return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}

