package utils

import (
	"image"
	"image/color"
	"image/draw"
	_ "image/jpeg"
	"image/png"
	"log"
	"os"

	"github.com/golang/freetype"
	"golang.org/x/image/font"
)

type VerifyImagePlugin struct{}

func (*VerifyImagePlugin) DrawText(originalImage, newImage, text, fontPath string) (string, error) {
	srcFile, err := os.Open(originalImage) // 替换为你的图片路径
	if err != nil {
		log.Fatal("图片打开失败:", err)
		return "", err
	}
	defer srcFile.Close()

	// 解码原始图片
	img, _, err := image.Decode(srcFile)
	if err != nil {
		log.Fatal("图片解码失败，只支持jpg、png:", err)
		return "", err
	}

	rgba := image.NewRGBA(img.Bounds())
	draw.Draw(rgba, rgba.Bounds(), img, image.Point{}, draw.Src)
	var fontStr string = fontPath
	if fontPath == "" {
		fontStr = "fonts/AlibabaPuHuiTi-3-115-Black.ttf"
	}
	fontBytes, err := os.ReadFile(fontStr) // 替换为你的字体路径
	if err != nil {
		log.Fatal("字体加载失败:", err)
		return "", err
	}
	fontObj, err := freetype.ParseFont(fontBytes)
	if err != nil {
		log.Fatal("字体解析失败:", err)
		return "", err
	}

	c := freetype.NewContext()
	c.SetDPI(72)                          // 屏幕分辨率
	c.SetFont(fontObj)                    // 设置中文字体
	c.SetFontSize(40)                     // 字体大小（磅）
	c.SetClip(rgba.Bounds())              // 绘制区域
	c.SetDst(rgba)                        // 目标画布
	c.SetSrc(image.NewUniform(color.RGBA{ // 文字颜色
		R: 255,
		G: 255,
		B: 255,
		A: 255,
	}))
	c.SetHinting(font.HintingFull) // 增强小字清晰度

	x := 150                                // 水平起始位置
	y := 250                                // 垂直起始位置
	yBase := y + int(c.PointToFixed(40)>>6) // 关键：修正垂直偏移
	pt := freetype.Pt(x, yBase)

	if _, err := c.DrawString(text, pt); err != nil {
		log.Fatal("文字绘制失败:", err)
	}

	outFile, err := os.Create(newImage)
	if err != nil {
		log.Fatal("输出文件创建失败:", err)
		return "", err
	}
	defer outFile.Close()
	if err := png.Encode(outFile, rgba); err != nil {
		log.Fatal("图片保存失败:", err)
		return "", err
	}
	log.Println("成功生成：output.png")
	return newImage, nil
}
