package chart_info

import (
	"hongze/hongze_yb/global"
	"time"
)

type ChartInfoView struct {
	ChartInfoId       int    `description:"图表ID"`
	ChartName         string `description:"来源名称"`
	ChartClassifyId   int    `description:"图表分类id"`
	ChartClassifyName string `description:"图表名称"`
	SysUserId         int
	SysUserRealName   string
	UniqueCode        string    `description:"图表唯一编码"`
	CreateTime        time.Time `json:"-"`
	ModifyTime        time.Time `json:"-"`
	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:季节性图"`
	Calendar          string    `description:"公历/农历"`
	SeasonStartDate   string    `description:"季节性图开始日期"`
	SeasonEndDate     string    `description:"季节性图开始日期"`
	ChartImage        string    `description:"图表图片"`
	Sort              int       `description:"排序字段，数字越小越排前面"`
	IsAdd             bool      `description:"true:已加入我的图库,false:未加入我的图库"`
	MyChartId         int
	MyChartClassifyId string `description:"我的图表分类，多个用逗号隔开"`
	EdbEndDate        string `description:"指标最新更新日期"`
	LeftMin           string `description:"图表左侧最小值"`
	LeftMax           string `description:"图表左侧最大值"`
	RightMin          string `description:"图表右侧最小值"`
	RightMax          string `description:"图表右侧最大值"`
	Right2Min         string `description:"图表右侧2最小值"`
	Right2Max         string `description:"图表右侧2最大值"`
	MinMaxSave        int    `description:"是否手动保存过上下限：0-否；1-是"`
	ChartSource       string `description:"图表来源str"`
	ChartSourceEn     string `description:"图表来源（英文）"`
	BarConfig         string `description:"柱方图的配置，json数据" json:"-"`
	ChartNameEn       string `description:"英文图表名称"`
	Unit              string `description:"中文单位名称"`
	UnitEn            string `description:"英文单位名称"`
	Source            int    `description:"1：ETA图库；2：商品价格"`
	ExtraConfig       string `description:"图表额外配置,json数据"`
	//ChartClassify     []*chart_classify.ChartClassifyView
	SeasonExtraConfig string `description:"季节性图表中的配置,json数据"`
	StartYear         int    `description:"当选择的日期类型为最近N年类型时，即date_type=20, 用start_year表示N"`
	ChartThemeId      int    `description:"图表应用主题ID"`
	ChartThemeStyle   string `description:"图表应用主题样式"`
	SourcesFrom       string `description:"图表来源"`
	Instructions      string `description:"图表说明"`
	MarkersLines      string `description:"标识线"`
	MarkersAreas      string `description:"标识区"`
}

type SaveChartInfoReq struct {
	ChartEdbInfoList []*ChartSaveItem `description:"指标及配置信息"`
	ChartInfoId      int              `description:"图表id,新增时传0"`
	DateType         int              `description:"日期类型:1:00年至今,2:10年至今,3:15年至今，4：年初至今，5:自定义时间,6:起始日期至今"`
	StartDate        string           `description:"自定义开始日期"`
	EndDate          string           `description:"自定义结束日期"`
	Calendar         string           `description:"公历/农历"`
	SeasonStartDate  string           `description:"季节性图开始日期"`
	SeasonEndDate    string           `description:"季节性图开始日期"`
	LeftMin          string           `description:"图表左侧最小值"`
	LeftMax          string           `description:"图表左侧最大值"`
	RightMin         string           `description:"图表右侧最小值"`
	RightMax         string           `description:"图表右侧最大值"`
	ExtraConfig      string           `description:"图表额外配置信息,json字符串"`
}

type ChartSaveItem struct {
	EdbInfoId   int     `description:"指标id"`
	MaxData     float64 `description:"上限"`
	MinData     float64 `description:"下限"`
	IsOrder     bool    `description:"true:正序,false:逆序"`
	IsAxis      int     `description:"1:左轴,0:右轴"`
	EdbInfoType int     `description:"1:标准指标,0:领先指标"`
	LeadValue   int     `description:"领先值"`
	LeadUnit    string  `description:"领先单位"`
	ChartStyle  string  `description:"图表类型"`
	ChartColor  string  `description:"颜色"`
	ChartWidth  float64 `description:"线条大小"`
	Source      int     `description:"1：ETA图库；2：商品价格"`
}

type ChartSortInfo struct {
	ChartInfoId         int    `description:"图表ID"`
	ChartInfoSource     int    `description:"1：ETA图库；2：商品价格"`
	MyChartId           int    `description:"我的图表ID"`
	MyChartClassifyId   int    `description:"我的图表分类ID"`
	MyChartClassifyName string `description:"我的图表分类名称"`
	UniqueCode          string `description:"图表唯一编码"`
	Sort                int    `description:"排序"`
	Switch              int    `description:"是否切换 0-未切换 1-已切换"`
	//SwitchTips			string	`description:"切换分类提示信息"`
}

type ChartBeforeNext struct {
	PrevChart ChartSortInfo
	NextChart ChartSortInfo
}

type RefreshChartInfoReq struct {
	ChartInfoId int
}

// GetChartInfoViewById 通过Id获取图表展示信息
func GetChartInfoViewById(chartInfoId int) (item *ChartInfoView, err error) {
	sql := `SELECT * FROM chart_info WHERE chart_info_id = ? `
	err = global.MYSQL["data"].Raw(sql, chartInfoId).First(&item).Error
	//err = global.MYSQL["data"].Model(ChartInfo{}).Where("chart_info_id = ?", chartInfoId).First(&item).Error
	return
}

// GetChartInfoViewById 通过ID获取图表数据库信息
func GetChartInfoById(chartInfoId int) (item *ChartInfo, err error) {
	err = global.MYSQL["data"].Model(ChartInfo{}).Where("chart_info_id = ?", chartInfoId).First(&item).Error
	return
}

// GetChartInfoViewByUniqueCode 通过唯一编码获取图表展示信息
func GetChartInfoViewByUniqueCode(uniqueCode string) (item *ChartInfoView, err error) {
	sql := `SELECT * FROM chart_info WHERE unique_code = ? LIMIT 1`
	err = global.MYSQL["data"].Raw(sql, uniqueCode).First(&item).Error
	return
}

type ChartSectionSeriesValSortAsc []ChartSectionSeriesValSort
type ChartSectionSeriesValSortDesc []ChartSectionSeriesValSort

type ChartSectionSeriesValSort struct {
	Index int
	Value float64
}

func (s ChartSectionSeriesValSortAsc) Len() int {
	return len(s)
}

func (s ChartSectionSeriesValSortAsc) Less(i, j int) bool {
	return s[i].Value < s[j].Value // 升序排序，如果想要降序则改为 s[i].Value > s[j].Value
}

func (s ChartSectionSeriesValSortAsc) Swap(i, j int) {
	s[i], s[j] = s[j], s[i]
}

func (s ChartSectionSeriesValSortDesc) Len() int {
	return len(s)
}

func (s ChartSectionSeriesValSortDesc) Less(i, j int) bool {
	return s[i].Value > s[j].Value // 升序排序，如果想要降序则改为 s[i].Value > s[j].Value
}

func (s ChartSectionSeriesValSortDesc) Swap(i, j int) {
	s[i], s[j] = s[j], s[i]
}
