package data_manage

import (
	"eta/eta_task/global"
	"eta/eta_task/utils"
	"gorm.io/gorm"
	"time"
)

type ChartEdbMapping struct {
	ChartEdbMappingId int       `gorm:"column:chart_edb_mapping_id;primaryKey;autoIncrement"`
	ChartInfoId       int       `description:"图表id"`
	EdbInfoId         int       `description:"指标id"`
	CreateTime        time.Time `description:"创建时间"`
	ModifyTime        time.Time `description:"修改时间"`
	UniqueCode        string    `description:"唯一编码"`
	MaxData           float64   `description:"上限"`
	MinData           float64   `description:"下限"`
	IsOrder           bool      `description:"true:正序,false:逆序"`
	IsAxis            int       `description:"true:左轴,false:右轴"`
	EdbInfoType       int       `description:"true:标准指标,false:领先指标"`
	LeadValue         int       `description:"领先值"`
	LeadUnit          string    `description:"领先单位"`
	ChartStyle        string    `description:"图表类型"`
	ChartColor        string    `description:"颜色"`
	PredictChartColor string    `description:"预测数据的颜色"`
	ChartWidth        float64   `description:"线条大小"`
	Source            int       `description:"1:ETA图库;2:商品价格曲线"`
	EdbAliasName      string    `description:"中文别名"`
	IsConvert         int       `description:"是否数据转换 0不转 1转"`
	ConvertType       int       `description:"数据转换类型 1乘 2除 3对数"`
	ConvertValue      float64   `description:"数据转换值"`
	ConvertUnit       string    `description:"数据转换单位"`
	ConvertEnUnit     string    `description:"数据转换单位"`
}

func GetChartEdbMappingTotal() (total int, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := ` SELECT COUNT(1) AS count FROM chart_edb_mapping `
	err = o.Raw(sql).Scan(&total).Error
	return
}

func GetChartEdbMappingList(startSize, pageSize int) (items []*ChartEdbMapping, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := ` SELECT * FROM chart_edb_mapping WHERE 1=1 `
	sql += " LIMIT ?,? "
	err = o.Raw(sql, startSize, pageSize).Find(&items).Error
	return
}

type ChartEdbInfoMapping struct {
	EdbInfoId           int         `description:"指标id"`
	SourceName          string      `description:"来源名称"`
	Source              int         `description:"来源id"`
	SubSource           int         `description:"来源id"`
	EdbCode             string      `description:"指标编码"`
	EdbName             string      `description:"指标名称"`
	EdbAliasName        string      `description:"指标名称(别名)"`
	EdbNameEn           string      `description:"英文指标名称"`
	EdbAliasNameEn      string      `description:"英文指标名称(别名)"`
	EdbType             int         `description:"指标类型:1:基础指标,2:计算指标"`
	Frequency           string      `description:"频率"`
	FrequencyEn         string      `description:"英文频率"`
	Unit                string      `description:"单位"`
	UnitEn              string      `description:"英文单位"`
	StartDate           string      `description:"起始日期"`
	EndDate             string      `description:"终止日期"`
	ModifyTime          string      `description:"指标最后更新时间"`
	ChartEdbMappingId   int         `description:"图表指标id"`
	ChartInfoId         int         `description:"图表id"`
	MaxData             float64     `description:"上限"`
	MinData             float64     `description:"下限"`
	IsOrder             bool        `description:"true:正序,false:逆序"`
	IsAxis              int         `description:"1:左轴,0:右轴"`
	EdbInfoType         int         `description:"1:标准指标,0:领先指标"`
	EdbInfoCategoryType int         `description:"0:普通指标,1:预测指标"`
	LeadValue           int         `description:"领先值"`
	LeadUnit            string      `description:"领先单位"`
	LeadUnitEn          string      `description:"领先英文单位"`
	ChartStyle          string      `description:"图表类型"`
	ChartColor          string      `description:"颜色"`
	PredictChartColor   string      `description:"预测数据的颜色"`
	ChartWidth          float64     `description:"线条大小"`
	ChartType           int         `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图,8:商品价格曲线图,9:相关性图"`
	LatestDate          string      `description:"数据最新日期"`
	LatestValue         float64     `description:"数据最新值"`
	MoveLatestDate      string      `description:"移动后的数据最新日期"`
	UniqueCode          string      `description:"指标唯一编码"`
	MinValue            float64     `json:"-" description:"最小值"`
	MaxValue            float64     `json:"-" description:"最大值"`
	DataList            interface{} `gorm:"-"`
	IsNullData          bool        `json:"-" description:"是否空数据"`
	MappingSource       int         `description:"1:ETA图库;2:商品价格曲线"`
	RegionType          string      `description:"交易所来源,海外还是国内" json:"-"`
	ClassifyId          int         `description:"分类id"`
	SubSourceName       string      `description:"子数据来源名称"`
	IndicatorCode       string      `description:"指标代码"`
	IsConvert           int         `description:"是否数据转换 0不转 1转"`
	ConvertType         int         `description:"数据转换类型 1乘 2除 3对数"`
	ConvertValue        float64     `description:"数据转换值"`
	ConvertUnit         string      `description:"数据转换单位"`
	ConvertEnUnit       string      `description:"数据转换单位"`
	IsJoinPermission    int         `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
	HaveOperaAuth       bool        `description:"是否有数据权限,默认:false"`
}

func (m *ChartEdbInfoMapping) AfterFind(db *gorm.DB) (err error) {
	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
	m.LatestDate = utils.GormDateStrToDateStr(m.LatestDate)
	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
	m.MoveLatestDate = utils.GormDateStrToDateStr(m.MoveLatestDate)
	return
}

func GetRelationEdbInfoListMappingByCondition(condition string, pars []interface{}) (item []*ChartEdbInfoMapping, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := ` SELECT a.* FROM edb_info AS a 
	JOIN edb_info_calculate_mapping AS b on a.edb_info_id = b.edb_info_id WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	err = o.Raw(sql, pars...).Find(&item).Error
	return
}