package base_from_yongyi_v2

import (
	"eta/eta_data_analysis/models"
	"eta/eta_data_analysis/utils"
	"fmt"
	"github.com/xuri/excelize/v2"
	"strings"
)

func getClassifySortMap() map[string]int {
	classifyMap := map[string]int{
		"日度-商品猪出栏价":            1,
		"日度-商品猪标肥价差":           2,
		"日度-商品猪全国均价和宰量":        3,
		"日度-屠宰企业屠宰量":           4,
		"历史猪价":                 5,
		"周度-商品猪出栏价":            6,
		"周度-体重":                7,
		"周度-屠宰厂宰前活猪重":          8,
		"周度-各体重段价差":            9,
		"二育成本":                 10,
		"二育销量":                 11,
		"育肥栏舍利用率":              12,
		"周度-养殖利润最新":            13,
		"周度-当期、预期成本":           14,
		"周度-育肥全价料出厂价":          15,
		"周度-成本计算附件":            16,
		"周度-毛白价差":              17,
		"周度-50公斤二元母猪价格":        18,
		"周度-规模场15公斤仔猪出栏价":      19,
		"仔猪、母猪":                20,
		"周度-河南屠宰白条成本":          21,
		"周度-淘汰母猪价格":            22,
		"周度-宰后结算价":             23,
		"周度-冻品库存":              24,
		"周度-冻品库存多样本":           25,
		"周度-鲜销率":               26,
		"周度-猪肉价(前三等级白条均价)":     27,
		"周度-猪肉产品价格":            28,
		"周度-屠宰企业日度屠宰量":         29,
		"周度-屠宰新2022.10.28":     30,
		"月度出栏完成率":              31,
		"月度计划出栏量":              32,
		"月度-淘汰母猪屠宰厂宰杀量":        33,
		"月度-猪料销量":              34,
		"月度-屠宰企业开工率":           35,
		"月度-屠宰厂公母比例":           36,
		"月度-生产指标(2021.5.7新增)":  37,
		"月度-生产指标2":             38,
		"月度-二元三元能繁比例":          39,
		"月度-能繁母猪存栏(2020年2月新增)": 40,
		"月度-小猪存栏(2020年5月新增)":   41,
		"月度-中猪存栏(2020年5月新增)":   42,
		"月度-大猪存栏(2020年5月新增)":   43,
		"月度-商品猪出栏量":            44,
		"月度-能繁母猪存栏量":           45,
		"月度-原种场二元后备母猪销量及出栏日龄":  46,
		"涌益样本测算":               47,
	}
	return classifyMap
}

var YongyiWeeklySheetMap5 map[string]*models.YongyiSheet
var YongyiWeeklySheetMap6 map[string]*models.YongyiSheet
var YongyiWeeklySheetMap9 map[string]*models.YongyiSheet

var YongyiBaseInfoMap map[string]*models.YongyiSheet

func init() {
	YongyiWeeklySheetMap5 = map[string]*models.YongyiSheet{
		"周度-50公斤二元母猪价格":    {"50公斤二元母猪价格", "周度-50公斤二元母猪价格", "周度", "元/头"},
		"周度-规模场15公斤仔猪出栏价":  {"规模场15公斤仔猪出栏价", "周度-规模场15公斤仔猪出栏价", "周度", "元/头"},
		"周度-宰后结算价":         {"宰后结算价", "周度-宰后结算价", "周度", "元/公斤"},
		"周度-冻品库存":          {"冻品库存", "周度-冻品库存", "周度", "%"},
		"周度-猪肉价(前三等级白条均价)": {"前三等级白条均价", "周度-猪肉价(前三等级白条均价)", "周度", "元/公斤"},
	}
	YongyiWeeklySheetMap6 = map[string]*models.YongyiSheet{
		"周度-冻品库存多样本": {"冻品库存多样本", "周度-冻品库存多样本", "周度", "%"},
		"月度出栏完成率":    {"出栏完成率", "月度出栏完成率", "旬度", "%"},
	}
	YongyiWeeklySheetMap9 = map[string]*models.YongyiSheet{
		"月度-小猪存栏(2020年5月新增)": {"50kg以下小猪存栏量", "月度-小猪存栏(2020年5月新增)", "月度", "头"},
		"月度-中猪存栏(2020年5月新增)": {"中猪存栏量", "月度-中猪存栏(2020年5月新增)", "月度", "头"},
		"月度-大猪存栏(2020年5月新增)": {"大猪存栏量", "月度-大猪存栏(2020年5月新增)", "月度", "头"},
	}

	YongyiBaseInfoMap = map[string]*models.YongyiSheet{
		"出栏价":                  {"商品猪出栏价", "日度-商品猪出栏价", "日度", "元/公斤"},
		"标肥价差":                 {"", "日度-商品猪标肥价差", "日度", "元/公斤"},
		"价格+宰量":                {"", "日度-商品猪全国均价和宰量", "日度", "元/公斤"},
		"屠宰企业日度屠宰量":            {"商品猪日屠宰量", "日度-屠宰企业屠宰量", "日度", "头"},
		"周度-商品猪出栏价":            {"商品猪出栏价", "周度-商品猪出栏价", "周度", "元/公斤"},
		"周度-体重":                {"商品猪出栏体重", "周度-体重", "周度", "公斤"},
		"周度-屠宰厂宰前活猪重":          {"商品猪宰前活猪重", "周度-屠宰厂宰前活猪重", "周度", "公斤"},
		"周度-各体重段价差":            {"", "周度-各体重段价差", "周度", "元/斤"},
		"周度-50公斤二元母猪价格":        {"50公斤二元母猪价格", "周度-50公斤二元母猪价格", "周度", "元/头"},
		"周度-规模场15公斤仔猪出栏价":      {"规模场15公斤仔猪出栏价", "周度-规模场15公斤仔猪出栏价", "周度", "元/头"},
		"周度-宰后结算价":             {"宰后结算价", "周度-宰后结算价", "周度", "元/公斤"},
		"周度-冻品库存":              {"冻品库存", "周度-冻品库存", "周度", "%"},
		"周度-冻品库存多样本":           {"冻品库存多样本", "周度-冻品库存多样本", "周度", "%"},
		"周度-猪肉价(前三等级白条均价)":     {"前三等级白条均价", "周度-猪肉价(前三等级白条均价)", "周度", "元/公斤"},
		"月度出栏完成率":              {"出栏完成率", "月度出栏完成率", "旬度", "%"},
		"月度计划出栏量":              {"月度计划出栏量环比", "月度计划出栏量", "月度", "%"},
		"月度-能繁母猪存栏(2020年2月新增)": {"能繁母猪存栏量", "月度-能繁母猪存栏(2020年2月新增)", "月度", "头"},
		"月度-小猪存栏(2020年5月新增)":   {"50kg以下小猪存栏量", "月度-小猪存栏(2020年5月新增)", "月度", "头"},
		"月度-中猪存栏(2020年5月新增)":   {"中猪存栏量", "月度-中猪存栏(2020年5月新增)", "月度", "头"},
		"月度-大猪存栏(2020年5月新增)":   {"大猪存栏量", "月度-大猪存栏(2020年5月新增)", "月度", "头"},
		"月度-商品猪出栏量":            {"商品猪出栏量", "月度-商品猪出栏量", "月度", "头"},
		"历史猪价":                 {"历史猪价", "历史猪价", "月度", "元/公斤"},
		"二育成本":                 {"", "二育成本", "周度", "kg"}, //单位有四种kg、无, 元/kg, 元
		"二育销量":                 {"二育销量", "二育销量", "周度", "%"},
		"育肥栏舍利用率":              {"育肥栏舍利用率", "育肥栏舍利用率", "旬度", "%"},
		"周度-养殖利润最新":            {"出栏肥猪利润", "周度-养殖利润最新", "周度", "元/头"},
		"周度-当期、预期成本":           {"", "周度-当期、预期成本", "周度", "元/kg"},
		"育肥全价料出厂价":             {"育肥全价料出厂均价参考", "周度-育肥全价料出厂价", "周度", "元/吨"},
		"周度-成本计算附件":            {"", "周度-成本计算附件", "周度", "元/头"}, //多个单位:元/头,%,kg,元
		"周度-毛白价差":              {"毛白价差", "周度-毛白价差", "周度", "元/公斤"},
		"仔猪、母猪":                {"", "仔猪、母猪", "周度", "元/头"},                //多个前缀,仔猪价,二元母猪价
		"周度-河南屠宰白条成本":          {"河南屠宰白条成本", "周度-河南屠宰白条成本", "周度", "元/kg"}, //多个单位:kg,元/kg,元/头
		"周度-淘汰母猪价格":            {"淘汰母猪价格", "周度-淘汰母猪价格", "周度", "元/斤"},
		"鲜销率":                  {"鲜销率", "周度-鲜销率", "周度", "%"},
		"周度-猪肉产品价格":            {"猪肉产品价格", "周度-猪肉产品价格", "周度", "元/公斤"},
		"周度-屠宰企业日度屠宰量":         {"屠宰企业日度屠宰量", "周度-屠宰企业日度屠宰量", "周度", "头"},
		"周度-屠宰新2022.10.28":     {"不同规模屠宰厂宰杀量", "周度-屠宰新2022.10.28", "周度", "头"},
		"月度-淘汰母猪屠宰厂宰杀量":        {"淘汰母猪屠宰厂宰杀量", "月度-淘汰母猪屠宰厂宰杀量", "月度", "头"},
		"月度-猪料销量":              {"饲料销量(环比)", "月度-猪料销量", "月度", "头"}, //todo 单位有问题
		"月度-屠宰企业开工率":           {"", "月度-屠宰企业开工率", "月度", "%"},
		"月度-屠宰厂公母比例":           {"屠宰厂", "月度-屠宰厂公母比例", "月度", "头"},           //多个单位:头,%
		"月度-生产指标(2021.5.7新增)":  {"生产指标", "月度-生产指标(2021.5.7新增)", "月度", "头"}, //多个单位:头,%
		"月度-生产指标2":             {"生产指标", "月度-生产指标2", "月度", "头"},            //多个单位:头,%
		"月度-二元三元能繁比例":          {"能繁母猪存栏量", "月度-二元三元能繁比例", "月度", "%"},      //多个单位:头,%
		"月度-能繁母猪存栏量":           {"月度能繁母猪存栏量", "月度-能繁母猪存栏量", "月度", "头"},
		"月度-原种场二元后备母猪销量及出栏日龄":  {"原种场二元后备母猪销量及出栏日龄", "月度-原种场二元后备母猪销量及出栏日龄", "月度", "头"},
		"涌益样本测算":               {"涌益样本测算", "涌益样本测算", "月度", "窝"}, //多个单位:头,%,窝,公斤,元/公斤
	}
}

func GetBaseInfo(sheetName string) (classifyName string, classifySort int, frequency string, unit string, namePrefix string, namePrefixPingin string) {
	// 获取指标分类
	info, ok := YongyiBaseInfoMap[sheetName]
	if !ok {
		return
	}
	classifyName = info.ClassifyName
	classifyMap := getClassifySortMap()
	classifySort, _ = classifyMap[classifyName]
	frequency = info.Frequency
	unit = info.Unit
	namePrefix = info.NamePrefix
	namePrefixPingin = "yyzx" + utils.GetFirstPingYin(namePrefix)
	return
}

func GetMergeCells(f *excelize.File, sheet string) (mergeCellMap map[int]map[int]string, err error) {
	mergedCells, err := f.GetMergeCells(sheet)
	if err != nil {
		fmt.Println(err)
		return
	}

	mergeCellMap = make(map[int]map[int]string)
	// 遍历所有合并单元格范围
	for _, cellRange := range mergedCells {
		fmt.Println("Merged Cell Range:", cellRange)
		cellVal := cellRange.GetCellValue()
		// 解析合并单元格范围,例如 "A1:B2"
		startCell, endCell := cellRange.GetStartAxis(), cellRange.GetEndAxis()
		if err != nil {
			fmt.Println(err)
			continue
		}

		// 解析起始单元格的下标
		startCol, startRow, err := excelize.CellNameToCoordinates(startCell)
		if err != nil {
			fmt.Println(err)
			continue
		}

		// 解析结束单元格的下标
		endCol, endRow, err := excelize.CellNameToCoordinates(endCell)
		if err != nil {
			fmt.Println(err)
			continue
		}

		// 打印合并单元格的起始和结束下标
		fmt.Printf("Start: Row %d, Col %d\n", startRow, startCol)
		fmt.Printf("End: Row %d, Col %d\n", endRow, endCol)
		//把合并的单元格整理成单个单元格,用于计算
		for i := startRow; i <= endRow; i++ {
			cellMap, ok := mergeCellMap[i-1]
			if !ok {
				cellMap = make(map[int]string)
			}
			for j := startCol; j <= endCol; j++ {
				cellMap[j-1] = strings.TrimSpace(cellVal)
			}
			mergeCellMap[i-1] = cellMap
		}
	}
	return
}

// GetWeekly13IndexName 二育成本指标名称处理
func GetWeekly13IndexName(name, level string) string {
	switch {
	case strings.Contains(name, "二育主流采购体重段"):
		return fmt.Sprintf("二育主流%s采购体重段", level)
	case strings.Contains(name, "计划出栏体重"):
		return fmt.Sprintf("计划%s出栏体重", level)
	case strings.Contains(name, "料肉比"):
		return fmt.Sprintf("%s料肉比", level)
	case strings.Contains(name, "采购成本"):
		return fmt.Sprintf("%s采购成本", level)
	case strings.Contains(name, "运费+损耗"):
		return fmt.Sprintf("%s运费+损耗", level)
	case strings.Contains(name, "增重饲料成本"):
		return fmt.Sprintf("%s增重饲料成本", level)
	case strings.Contains(name, "二育成本"):
		return fmt.Sprintf("%s二育成本", level)
	}
	return name
}

// GetWeekly13IndexUnit 二育成本指标名称处理
func GetWeekly13IndexUnit(name string) string {
	switch {
	case strings.Contains(name, "二育主流采购体重段") || strings.Contains(name, "计划出栏体重"):
		return "kg"
	case strings.Contains(name, "料肉比"):
		return "无"
	case strings.Contains(name, "采购成本") || strings.Contains(name, "运费+损耗") || strings.Contains(name, "二育成本"):
		return "元/kg"
	case strings.Contains(name, "增重饲料成本"):
		return "元"
	}
	return name
}