package logic

import (
	"fmt"
	"github.com/360EntSecGroup-Skylar/excelize"
	"github.com/exhibition-main/internal/model"
	"github.com/exhibition-main/pkg/utils"
	"image"
	"math"
	"os"
	"path/filepath"
	"strings"
)

func DealExcelImg(filePath string) (err error) {
	f, err := excelize.OpenFile(filePath)
	filename := filepath.Base(filePath)
	var cellHeight, cellWidth float64 = 150, 40

	//minColumn := int([]byte("A")[0])
	// string(rune(i))
	rows := f.GetRows("Sheet1")
	var columnFullName string
	var lineNo, columnNo int32
	var cellNo string
	for k, row := range rows {
		lineNo = int32(k + 1)
		if lineNo != 1 {
			f.SetRowHeight("Sheet1", int(lineNo), cellHeight)
		}
		var firstCell int32
		var suffix string
		var columnName, firstCellName string
		columnFullName = ""
		for kk, colCell := range row {
			cellNo = ""
			columnNo = int32(int([]byte("A")[0]) + kk%26)
			columnName = string(columnNo)
			if kk >= 26 {
				firstCell = int32(int([]byte("A")[0]) + (int(math.Floor(float64(kk)/float64(26))) - 1))
				firstCellName = string(firstCell)
			}
			columnFullName = fmt.Sprintf("%s%s", firstCellName, columnName)
			if strings.Contains(colCell, "cdns.fontree.cn") {
				suffix = colCell[strings.LastIndex(colCell, "."):]
				if strings.Contains(".jpg,.png,.gif,.bmp,.jpeg,", suffix) {
					cellNo = fmt.Sprintf("%s%v", columnFullName, lineNo)
					// 需要转化图片 ,先下载图片
					fullPath, _ := utils.SaveUrlFileDisk(colCell, "./tmp_img", "")
					reader, _ := os.Open(fullPath)
					defer reader.Close()
					im, _, _ := image.DecodeConfig(reader)
					rateX := cellWidth * 2.0 / float64(im.Width)
					rateY := cellHeight * 1.33 / float64(im.Height)
					f.SetCellValue("Sheet1", cellNo, "")
					err = f.AddPicture("Sheet1", cellNo, fullPath, fmt.Sprintf(`{"x_scale": %v, "y_scale": %v, "hyperlink": "%s", "hyperlink_type": "External"}`, rateX, rateY, colCell))
					_ = os.Remove(fullPath)
					if err != nil {
						return
					}
				}
			}
		}
	}
	f.SetColWidth("Sheet1", "A", columnFullName, cellWidth)

	if err != nil {
		fmt.Println(err)
	}
	err = f.SaveAs(fmt.Sprintf("%s%s", model.MediaPath, filename))
	if err != nil {
		fmt.Println(err)
	}
	return
}