package helper

import (
	"fmt"
	"github.com/go-kratos/kratos/v2/transport/http"
	"github.com/pkg/errors"
	"github.com/xuri/excelize/v2"
	"strconv"
)

func ImportFile(ctx http.Context) (map[string][]int32, error) {
	// 获取上传的文件
	file, _, err := ctx.Request().FormFile("file")
	if err != nil {
		return nil, fmt.Errorf("failed to get form file: %w", err)
	}
	defer file.Close()

	// 解析Excel文件
	f, err := excelize.OpenReader(file)
	if err != nil {
		return nil, fmt.Errorf("failed to open excel file: %w", err)
	}
	defer f.Close()

	// 获取第一个工作表的名称
	sheetNames := f.GetSheetList()

	if len(sheetNames) == 0 {
		return nil, fmt.Errorf("无效的excel,未获取到对应的sheet")
	}

	// 获取所有行
	rows, err := f.GetRows(sheetNames[0])
	if err != nil {
		return nil, fmt.Errorf("failed to get rows from Excel sheet: %w", err)
	}
	if len(rows) == 0 {
		return nil, fmt.Errorf("无效的excel,未获取到对应的记录数据")
	}

	actualHeaders := rows[0] // 获取第一行作为表头
	var key int
	for i, v := range actualHeaders {
		if v == "ID" {
			key = i
		}
	}

	// 定义一个map来存储订单ID到SendInfo的映射
	var ids []int32
	// 遍历行并处理数据
	for i, row := range rows {

		if i == 0 {
			continue // 跳过头栏
		}
		if row[key] != "" {
			id, _ := strconv.Atoi(row[key])
			ids = append(ids, int32(id))
		}
	}
	if len(ids) == 0 {
		return nil, errors.New("未获取到数据")
	}
	idsPb := map[string][]int32{"ids": ids}

	return idsPb, nil
}