package models

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

type EdbInfoReq struct {
	EdbInfoId int `description:"图表id,新增时传0"`
}

// DeleteChartInfoDataRedis 清除图表缓存
func DeleteChartInfoDataRedis(bodyByte []byte) (err error) {
	var req EdbInfoReq
	err = json.Unmarshal(bodyByte, &req)
	if err != nil {
		return
	}
	if req.EdbInfoId > 0 {
		list, tmpErr := GetChartEdbMappingListByEdbInfoId(req.EdbInfoId)
		if tmpErr != nil {
			err = tmpErr
			return
		}

		// 删除图表的id
		for _, v := range list {
			_ = utils.Rc.Delete(GetChartInfoDataKey(v.ChartInfoId))
		}
	}
	return
}

// GetChartInfoDataKey 获取图表缓存的key
func GetChartInfoDataKey(chartInfoId int) string {
	key := fmt.Sprint(utils.CACHE_CHART_INFO_DATA, chartInfoId)
	return key
}

type ChartInfo struct {
	ChartInfoId     int    `orm:"column(chart_info_id);pk"`
	ChartName       string `description:"来源名称"`
	ChartNameEn     string `description:"英文图表名称"`
	ChartClassifyId int    `description:"图表分类id"`
	SysUserId       int
	SysUserRealName string
	UniqueCode      string `description:"图表唯一编码"`
	CreateTime      time.Time
	ModifyTime      time.Time
	DateType        int    `description:"日期类型:1:00年至今,2:10年至今,3:15年至今，4：年初至今，5:自定义时间"`
	StartDate       string `description:"自定义开始日期"`
	EndDate         string `description:"自定义结束日期"`
	IsSetName       int    `description:"设置名称"`
	EdbInfoIds      string `description:"指标id"`
	ChartType       int    `description:"生成样式:1:曲线图,2:季节性图,3:面积图，4：柱状图，5：散点图，6：组合图，7：柱方图，8：商品价格曲线图，9：相关性图"`
	Calendar        string `description:"公历/农历"`
	SeasonStartDate string `description:"季节性图开始日期"`
	SeasonEndDate   string `description:"季节性图开始日期"`
	ChartImage      string `description:"图表图片"`
	Sort            int    `description:"排序字段，数字越小越排前面"`
	LeftMin         string `description:"图表左侧最小值"`
	LeftMax         string `description:"图表左侧最大值"`
	RightMin        string `description:"图表右侧最小值"`
	RightMax        string `description:"图表右侧最大值"`
	Disabled        int    `description:"是否禁用，0：启用，1：禁用，默认：0"`
	BarConfig       string `description:"柱方图的配置，json数据"`
	Source          int    `description:"1：ETA图库；2：商品价格曲线"`
	ExtraConfig     string `description:"图表额外配置,json数据"`
}

// GetChartInfoById 通过id获取图表信息
func GetChartInfoById(chartInfoId int) (item *ChartInfo, err error) {
	o := orm.NewOrm()
	sql := ` SELECT * FROM chart_info WHERE chart_info_id=? `
	err = o.Raw(sql, chartInfoId).QueryRow(&item)
	return
}
