package models

import (
	"github.com/beego/beego/v2/client/orm"
	"time"
)

type ChartEdbMapping struct {
	ChartEdbMappingId int       `orm:"column(chart_edb_mapping_id);pk"`
	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:"颜色"`
	ChartWidth        float64   `description:"线条大小"`
	Source            int       `description:"1:ETA图库;2:商品价格曲线"`
}

// GetChartEdbMappingListByEdbInfoId 根据指标id获取关联图表列表
func GetChartEdbMappingListByEdbInfoId(edbInfoId int) (list []*ChartEdbMapping, err error) {
	o := orm.NewOrm()
	sql := ` SELECT *
             FROM chart_edb_mapping AS a
			 WHERE edb_info_id=? 
             ORDER BY chart_edb_mapping_id ASC `
	_, err = o.Raw(sql, edbInfoId).QueryRows(&list)
	return
}

// GetGroupChartEdbMappingListByEdbInfoId 根据指标id和来源分组获取关联图表列表
func GetGroupChartEdbMappingListByEdbInfoId(edbInfoId, source int) (list []*ChartEdbMapping, err error) {
	o := orm.NewOrm()
	sql := ` SELECT *
             FROM chart_edb_mapping AS a
			 WHERE edb_info_id=? AND source = ?  GROUP BY chart_info_id `
	_, err = o.Raw(sql, edbInfoId, source).QueryRows(&list)
	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{}
	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"`
	UniqueFlag          string  `description:"唯一标识(与唯一编码不是一个东西)"`
}

// GetChartEdbMappingByEdbInfoId 根据指标id获取edb_mapping
func GetChartEdbMappingByEdbInfoId(edbInfoId int) (item *ChartEdbInfoMapping, err error) {
	o := orm.NewOrm()
	sql := ` SELECT edb_info_id,source_name,classify_id,source,sub_source,edb_code,edb_name,edb_name_en,frequency,unit,unit_en,start_date,end_date,modify_time,latest_date,latest_value,unique_code,edb_info_type AS edb_info_category_type,edb_type,max_value,min_value,is_join_permission
             FROM edb_info
			 WHERE edb_info_id = ? limit 1`
	err = o.Raw(sql, edbInfoId).QueryRow(&item)
	return
}