package watermark

import (
	_ "embed"
	"image"
	"image/color"
	"image/draw"
	"image/jpeg"
	"image/png"
	"os"
	"time"

	"github.com/goki/freetype"
	"github.com/goki/freetype/truetype"
)

//go:embed font.ttf
var ttfBytes []byte

// 添加水印
func Add(path string) error {
	f, err := os.Open(path)
	if err != nil {
		return err
	}
	defer f.Close()
	origin, err := png.Decode(f)
	if err != nil {
		return err
	}
	// 新建一个画布，把原图、水印、文字叠加上去
	newImage := image.NewRGBA(origin.Bounds())
	// 叠加原图
	draw.Draw(newImage, origin.Bounds(), origin, image.Point{}, draw.Over)
	// 加载字体
	font, err := GetFont()
	if err != nil {
		return err
	}
	fc := freetype.NewContext()   // xx
	fc.SetDPI(72)                 // dpi
	fc.SetFont(font)              // 字体
	fc.SetFontSize(24)            // 字体大小(磅)
	fc.SetClip(newImage.Bounds()) // 设置剪裁矩形以进行绘制
	fc.SetDst(newImage)           // 设置目标图像(字体加在哪里)
	//fc.SetSrc(image.Black)        // 字体颜色
	// 可根据 RGBA 设置颜色
	fc.SetSrc(image.NewUniform(color.RGBA{R: 255, G: 0, B: 0, A: 255}))
	text := "截图时间：" + time.Now().Format("2006-01-02 15:04:05")
	// 字体水印位置：在水印位置的基础上 偏移 Y 轴 380 * 24
	fontPt := freetype.Pt(origin.Bounds().Max.X-400, 24)
	if _, err = fc.DrawString(text, fontPt); err != nil {
		return err
	}
	// 创建水印文件
	created, err := os.Create(path)
	if err != nil {
		return err
	}
	defer created.Close()
	// 写入
	if err = jpeg.Encode(created, newImage, &jpeg.Options{Quality: 80}); err != nil {
		return err
	}
	return nil
}

// 添加水印
func AddTaxErrInfo(path string) error {
	f, err := os.Open(path)
	if err != nil {
		return err
	}
	defer f.Close()
	origin, err := png.Decode(f)
	if err != nil {
		return err
	}
	// 新建一个画布，把原图、水印、文字叠加上去
	newImage := image.NewRGBA(origin.Bounds())
	// 叠加原图
	draw.Draw(newImage, origin.Bounds(), origin, image.Point{}, draw.Over)
	// 加载字体
	font, err := GetFont()
	if err != nil {
		return err
	}
	fc := freetype.NewContext()   // xx
	fc.SetDPI(72)                 // dpi
	fc.SetFont(font)              // 字体
	fc.SetFontSize(24)            // 字体大小(磅)
	fc.SetClip(newImage.Bounds()) // 设置剪裁矩形以进行绘制
	fc.SetDst(newImage)           // 设置目标图像(字体加在哪里)
	//fc.SetSrc(image.Black)        // 字体颜色
	// 可根据 RGBA 设置颜色
	fc.SetSrc(image.NewUniform(color.RGBA{R: 255, G: 0, B: 0, A: 255}))
	text := "截图时间：" + time.Now().Format("2006-01-02 15:04:05")
	// 字体水印位置：在水印位置的基础上 偏移 Y 轴 380 * 24
	fontPt := freetype.Pt(origin.Bounds().Max.X-400, 24)
	if _, err = fc.DrawString(text, fontPt); err != nil {
		return err
	}
	fontPt2 := freetype.Pt(origin.Bounds().Dx()/2-130, origin.Bounds().Dy()/2)
	text2 := "税局页面卡顿，加载失败！"
	if _, err = fc.DrawString(text2, fontPt2); err != nil {
		return err
	}
	// 创建水印文件
	created, err := os.Create(path)
	if err != nil {
		return err
	}
	defer created.Close()
	// 写入
	if err = jpeg.Encode(created, newImage, &jpeg.Options{Quality: 80}); err != nil {
		return err
	}
	return nil
}

// GetFont 获取字体
func GetFont() (*truetype.Font, error) {
	return freetype.ParseFont(ttfBytes)
}
