package xlsx

import (
	"database/sql"
	"errors"
	"fmt"
	"log"
	"mime/multipart"
	"strings"
	"xugu_license/internal/models"
	"xugu_license/internal/module/email"

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

func parseExcel(file *multipart.File) []models.LicenseApplication {

	f, err := excelize.OpenReader(*file)
	if err != nil {
		log.Fatalf("无法读取 Excel 文件: %v", err)
	}
	// 获取第一个工作表的名称
	sheetName := f.GetSheetName(f.GetActiveSheetIndex())

	// 获取所有单元格数据
	rows, err := f.GetRows(sheetName)
	if err != nil {
		log.Fatalf("无法获取行数据: %v", err)
	}

	var applications []models.LicenseApplication

	for _, row := range rows[1:] { // 跳过表头行
		if len(row) == 0 {
			continue // 跳过空行
		}

		app := models.LicenseApplication{
			Creator:           getValue(row, 0),
			ApplicationDate:   getValue(row, 1),
			AssociatedProject: getValue(row, 2),
			SalesPerson:       getValue(row, 3),
			SalesEmail:        getValue(row, 4),
			SupportPerson:     getValue(row, 5),
			SupportEmail:      getValue(row, 6),
			TotalNodes:        getValue(row, 7),
			Company:           getValue(row, 8),
			ProductName:       getValue(row, 9),
			Version:           getValue(row, 10),
			NodeCount:         getValue(row, 11),
			Processor:         getValue(row, 12),
			OperatingSystem:   getValue(row, 13),
			MasterMacAddress:  getValue(row, 14),
			SecondaryMasterMacAddress: sql.NullString{
				String: getValue(row, 15),
				Valid:  getValue(row, 15) != "", // 如果字符串不为空,则认为它是有效的
			},
		}

		applications = append(applications, app)
	}

	// 处理 applications 切片
	for _, app := range applications {
		// 打印结构体的值
		fmt.Printf("Creator: %s\n", app.Creator)
		fmt.Printf("ApplicationDate: %s\n", app.ApplicationDate)
		fmt.Printf("AssociatedProject: %s\n", app.AssociatedProject)
		fmt.Printf("SalesPerson: %s\n", app.SalesPerson)
		fmt.Printf("SalesEmail: %s\n", app.SalesEmail)
		fmt.Printf("SupportPerson: %s\n", app.SupportPerson)
		fmt.Printf("SupportEmail: %s\n", app.SupportEmail)
		fmt.Printf("Company: %s\n", app.Company)
		fmt.Printf("TotalNodes: %s\n", app.TotalNodes)
		fmt.Printf("ProductName: %s\n", app.ProductName)
		fmt.Printf("Version: %s\n", app.Version)
		fmt.Printf("NodeCount: %s\n", app.NodeCount)
		fmt.Printf("Processor: %s\n", app.Processor)
		fmt.Printf("OperatingSystem: %s\n", app.OperatingSystem)
		fmt.Printf("MasterMacAddress: %s\n", app.MasterMacAddress)
		fmt.Printf("SecondaryMasterMacAddress: %s\n", app.SecondaryMasterMacAddress)
	}
	return applications
}

func getValue(row []string, index int) string {
	if index < len(row) && row[index] != "" {
		return row[index]
	}
	return ""
}

func XlsxController(ass interface{}) ([]models.LicenseApplication, error) {
	if ass != nil && ass.(*multipart.File) != nil {
		fmt.Println("xlsx")
		licenseProcess := parseExcel(ass.(*multipart.File))
		return licenseProcess, nil
	} else {
		return nil, errors.New("xlsx file not found")
	}

}

func ExcelToMail(lic models.LicenseApplication, licStr []byte, licStr2 []byte) {

	// 	insertQuery := `
	// INSERT INTO LicenseApplication (
	//     UserId,UpUser,UpTime,LicenseFlage ,Creator, ApplicationDate,
	// 	AssociatedProject, SalesPerson, SalesEmail, SupportPerson, SupportEmail,
	// 	TotalNodes, ProductName, Version, NodeCount,Processor,
	// 	 OperatingSystem, MasterMacAddress, SecondaryMasterMacAddress
	// ) VALUES (?, ?, ?, ?, ?,?,
	//  ?, ?, ?, ?, ?,
	//   ?, ?, ?,?,?,
	//   ?,?,?)
	// `

	// 	fmt.Printf("lic 为 %#v", lic)
	// 	_, err := global.XuguDB.Exec(insertQuery,
	// 		"10", "gttes", time.Now(), "未生成", lic.Creator, lic.ApplicationDate, lic.AssociatedProject, lic.SalesPerson, lic.SalesEmail,
	// 		lic.TotalNodes, lic.SupportPerson, lic.SupportEmail,
	// 		lic.ProductName, lic.Version, lic.NodeCount, lic.Processor, lic.OperatingSystem, lic.MasterMacAddress, lic.SecondaryMasterMacAddress,
	// 	)
	// 	if err != nil {
	// 		fmt.Println("插入数据失败: %v", err)

	// 	}

	CheckEmailFormat([]*string{&lic.SalesEmail, &lic.SupportEmail})

	body := fmt.Sprintf(" 来自%s 使用%s %s,该项目销售:%s, 技术支持:%s", lic.AssociatedProject, lic.ProductName, lic.SalesEmail, lic.SalesPerson, lic.SupportPerson)
	email.NewEmail("gt@xugudb.com", "zI7cKadNHv7XedV5", []string{lic.SalesEmail, lic.SupportEmail}, "smtp.sparkspace.huaweicloud.com",
		"465", "来自license消息分发", body, licStr, licStr2)

	//	email.SendEmail(em)

}

// CheckEmailFormat 检查邮箱格式
func CheckEmailFormat(emails []*string) {
	for _, email := range emails {
		if !strings.Contains(*email, "@") {
			*email = ""
		} else {
			fmt.Println("邮箱格式正确")
		}
	}

}