package data_manage

import (
	"eta/eta_api/utils"
	"fmt"
	"github.com/beego/beego/v2/client/orm"
	"time"
)

// EditFutureGoodChartEnInfoAndEdbEnInfo 更改商品价格曲线英文信息
func EditFutureGoodChartEnInfoAndEdbEnInfo(chartInfoId int, chartNameEn string, edbInfoId int, edbNameEn, edbUnitEn string) (err error) {
	o := orm.NewOrmUsingDB("data")
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()

	sql := ` UPDATE  chart_info
			SET
			  chart_name_en =?,
			  modify_time = NOW()
			WHERE chart_info_id = ?`

	_, err = to.Raw(sql, chartNameEn, chartInfoId).Exec()
	if err != nil {
		fmt.Println("UPDATE  chart_info Err:", err.Error())
		return err
	}
	var count int
	csql := `SELECT COUNT(1) AS count FROM chart_edb_mapping WHERE chart_info_id=? AND edb_info_id=? AND source = 1 `
	err = to.Raw(csql, chartInfoId, edbInfoId).QueryRow(&count)
	if err != nil {
		fmt.Println("QueryRow Err:", err.Error())
		return err
	}
	if count > 0 {
		msql := ` UPDATE  edb_info
			SET edb_name_en = ?,
			  unit_en = ?,
			  modify_time = NOW()
			WHERE edb_info_id = ? `
		_, err = to.Raw(msql, edbNameEn, edbUnitEn, edbInfoId).Exec()
		if err != nil {
			fmt.Println("edb_info Err:" + err.Error())
			return err
		}
	}

	return
}

type EditFutureGoodChartInfoBaseReq struct {
	ChartInfoId int    `description:"图表ID"`
	ChartName   string `description:"图表名称(根据当前语言版本不同而不同)"`
	/*	EdbName        string `description:"指标名称(根据当前语言版本不同而不同)"`
		Unit           string `description:"指标单位(根据当前语言版本不同而不同)"`*/
	ProfitName       string                      `description:"利润名称(根据当前语言版本不同而不同)"`
	FutureGoodName   string                      `description:"期货合约名称(根据当前语言版本不同而不同)"`
	ChartEdbInfoList []*EditChartInfoEdbBaseItem `description:"指标及配置信息"`
	XDataList        []string                    `description:"商品价格曲线的X轴数据"`
}

// EditBaseFutureGoodChartInfoAndEdbEnInfo
// @Description:  编辑期货商品基础的图表信息及指标信息
// @author: Roc
// @datetime 2024-04-23 13:58:23
// @param chartInfo ChartInfo
// @param chartName string
// @param edbInfoId int
// @param edbName string
// @param edbUnit string
// @param lang string
// @return err error
func EditBaseFutureGoodChartInfoAndEdbEnInfo(chartInfo *ChartInfo, req *EditFutureGoodChartInfoBaseReq, lang string) (err error) {
	o := orm.NewOrmUsingDB("data")
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()

	// 修改图表信息
	updateChartCols := make([]string, 0)
	switch lang {
	case utils.EnLangVersion:
		chartInfo.ChartNameEn = req.ChartName
		updateChartCols = append(updateChartCols, "ChartNameEn")
	default:
		chartInfo.ChartName = req.ChartName
		updateChartCols = append(updateChartCols, "ChartName")
	}
	chartInfo.ModifyTime = time.Now()
	updateChartCols = append(updateChartCols, "ModifyTime", "BarConfig")
	_, err = to.Update(chartInfo, updateChartCols...)
	if err != nil {
		fmt.Println("UPDATE  chart_info Err:", err.Error())
		return err
	}
	for _, v := range req.ChartEdbInfoList {
		msql := ` UPDATE edb_info SET modify_time = NOW()  `
		pars := make([]interface{}, 0)
		switch lang {
		case utils.EnLangVersion:
			if v.EdbName != `` {
				msql += ` ,edb_name_en = ? `
				pars = append(pars, v.EdbName)
			}

			if v.Unit != `` {
				msql += ` ,unit_en = ? `
				pars = append(pars, v.Unit)
			}

		default:

			if v.EdbName != `` {
				msql += ` ,edb_name = ? `
				pars = append(pars, v.EdbName)
			}

			if v.Unit != `` {
				msql += ` ,unit = ? `
				pars = append(pars, v.Unit)
			}
		}
		msql += ` WHERE edb_info_id = ? `
		pars = append(pars, v.EdbInfoId)
		_, err = to.Raw(msql, pars...).Exec()
		if err != nil {
			fmt.Println("edb_info Err:" + err.Error())
			return err
		}
	}
	return
}

// EditFutureGoodProfitChartEnInfoAndEdbEnInfo 更改商品利润曲线英文信息
func EditFutureGoodProfitChartEnInfoAndEdbEnInfo(chartInfoId int, chartNameEn string, edbInfoId int, edbNameEn, edbUnitEn, profitNameEn string) (err error) {
	o := orm.NewOrmUsingDB("data")
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()

	sql := ` UPDATE  chart_info
			SET chart_name_en =?,modify_time = NOW()
			WHERE chart_info_id = ?`

	_, err = to.Raw(sql, chartNameEn, chartInfoId).Exec()
	if err != nil {
		fmt.Println("UPDATE  chart_info Err:", err.Error())
		return
	}

	// 更改指标英文信息
	sql = ` UPDATE  edb_info
			SET edb_name_en = ?,unit_en = ?,modify_time = NOW()
			WHERE edb_info_id = ? `
	_, err = to.Raw(sql, edbNameEn, edbUnitEn, edbInfoId).Exec()
	if err != nil {
		fmt.Println("edb_info Err:" + err.Error())
		return
	}

	// 更改指标英文信息
	sql = ` UPDATE  chart_info_future_good_profit
			SET profit_name_en = ?,modify_time = NOW()
			WHERE chart_info_id = ? `
	_, err = to.Raw(sql, profitNameEn, chartInfoId).Exec()
	if err != nil {
		fmt.Println("chart_info_future_good_profit Err:" + err.Error())
		return
	}

	return
}

// EditBaseFutureGoodProfitChartInfoAndEdbEnInfo
// @Description: 更改商品利润曲线基础信息
// @author: Roc
// @datetime 2024-04-23 14:36:45
// @param chartInfo *ChartInfo
// @param chartName string
// @param edbInfoId int
// @param edbName string
// @param edbUnit string
// @param profitName string
// @param lang string
// @return err error
func EditBaseFutureGoodProfitChartInfoAndEdbEnInfo(chartInfo *ChartInfo, req *EditFutureGoodChartInfoBaseReq, lang string) (err error) {
	o := orm.NewOrmUsingDB("data")
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()

	// 修改图表信息
	updateChartCols := make([]string, 0)
	switch lang {
	case utils.EnLangVersion:
		chartInfo.ChartNameEn = req.ChartName
		updateChartCols = append(updateChartCols, "ChartNameEn")
	default:
		chartInfo.ChartName = req.ChartName
		updateChartCols = append(updateChartCols, "ChartName")
	}
	chartInfo.ModifyTime = time.Now()
	updateChartCols = append(updateChartCols, "ModifyTime", "ExtraConfig")
	_, err = to.Update(chartInfo, updateChartCols...)
	if err != nil {
		fmt.Println("UPDATE  chart_info Err:", err.Error())
		return err
	}
	var sql string
	// 更改指标英文信息
	for _, v := range req.ChartEdbInfoList {
		msql := ` UPDATE edb_info SET modify_time = NOW()  `
		pars := make([]interface{}, 0)
		switch lang {
		case utils.EnLangVersion:
			if v.EdbName != `` {
				msql += ` ,edb_name_en = ? `
				pars = append(pars, v.EdbName)
			}

			if v.Unit != `` {
				msql += ` ,unit_en = ? `
				pars = append(pars, v.Unit)
			}

		default:

			if v.EdbName != `` {
				msql += ` ,edb_name = ? `
				pars = append(pars, v.EdbName)
			}

			if v.Unit != `` {
				msql += ` ,unit = ? `
				pars = append(pars, v.Unit)
			}
		}
		msql += ` WHERE edb_info_id = ? `
		pars = append(pars, v.EdbInfoId)
		_, err = to.Raw(msql, pars...).Exec()
		if err != nil {
			fmt.Println("edb_info Err:" + err.Error())
			return err
		}
	}

	// 更改指标英文信息

	switch lang {
	case utils.EnLangVersion:
		sql = ` UPDATE  chart_info_future_good_profit SET profit_name_en = ?,modify_time = NOW() WHERE chart_info_id = ? `
	default:
		sql = ` UPDATE  chart_info_future_good_profit SET profit_name = ?,modify_time = NOW() WHERE chart_info_id = ? `
	}
	_, err = to.Raw(sql, req.ProfitName, chartInfo.ChartInfoId).Exec()
	if err != nil {
		fmt.Println("chart_info_future_good_profit Err:" + err.Error())
		return
	}

	return
}