// Package excel...
//
// Description : excel...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2021-11-19 12:25 下午
package excel

import (
	"fmt"

	"github.com/xuri/excelize/v2"
)

// NewExcel 获取excel实例
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:28 下午 2021/11/19
func NewExcel() *Create {
	return &Create{
		fileHandler: excelize.NewFile(),
	}
}

// Create 创建excel
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:27 下午 2021/11/19
type Create struct {
	// fileHandler excel文件处理句柄
	fileHandler *excelize.File
}

// GenerateSheet 生成sheet
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:43 下午 2021/11/19
func (c *Create) GenerateSheet(sheetList []SheetData) error {
	for _, sheet := range sheetList {
		sheetIndex := c.fileHandler.NewSheet(sheet.Name)
		if sheet.IsDefault {
			// 设置活跃
			c.fileHandler.SetActiveSheet(sheetIndex)
		}
		for lineIdx, colList := range sheet.Data {
			for colIdx, col := range colList {
				position := c.getColPosition(colIdx, lineIdx)
				if err := c.fileHandler.SetCellValue(sheet.Name, position, col); nil != err {
					return err
				}
			}
		}
	}
	return nil
}

// Save 保存文件
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2:04 下午 2021/11/19
func (c *Create) Save(fullFilePath string) error {
	return c.fileHandler.SaveAs(fullFilePath)
}

// getColPosition 获取列名
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 3:14 下午 2021/11/19
func (c *Create) getColPosition(colIndex int, dataLineIndex int) string {
	realIndex := colIndex % 26
	first := colIndex / 26
	if first == 0 {
		return fmt.Sprintf("%s%d", WordMap[realIndex], dataLineIndex+1)
	}
	return fmt.Sprintf("%s%s%d", WordMap[first], WordMap[realIndex], dataLineIndex+1)
}