package chart_theme

import "time"

// ChartTheme 图表主题
type ChartTheme struct {
	ChartThemeID     int       `gorm:"primaryKey;column:chart_theme_id" json:"-"`
	ChartThemeName   string    `gorm:"column:chart_theme_name" json:"chartThemeName"`      // 主题名称
	ChartThemeTypeID int       `gorm:"column:chart_theme_type_id" json:"chartThemeTypeId"` // 图表类型id
	ChartImage       string    `gorm:"column:chart_image" json:"chartImage"`               // 图表默认缩略图
	Config           string    `gorm:"column:config" json:"config"`                        // 配置的值
	IsDelete         uint8     `gorm:"column:is_delete" json:"isDelete"`                   // 是否删除，0：未删除；1：已删除
	SysUserID        int       `gorm:"column:sys_user_id" json:"sysUserId"`                // 创建人id
	SysUserRealName  string    `gorm:"column:sys_user_real_name" json:"sysUserRealName"`   // 创建人真实名称
	IsSystemTheme    uint8     `gorm:"column:is_system_theme" json:"isSystemTheme"`        // 是否是系统主题，0：不是；1：是
	ModifyTime       time.Time `gorm:"column:modify_time" json:"modifyTime"`               // 最近一次的编辑时间
	CreateTime       time.Time `gorm:"column:create_time" json:"createTime"`               // 创建时间
}

// TableName get sql table name.获取数据库表名
func (m *ChartTheme) TableName() string {
	return "chart_theme"
}

// ChartThemeColumns get sql column name.获取数据库列名
var ChartThemeColumns = struct {
	ChartThemeID     string
	ChartThemeName   string
	ChartThemeTypeID string
	ChartImage       string
	Config           string
	IsDelete         string
	SysUserID        string
	SysUserRealName  string
	IsSystemTheme    string
	ModifyTime       string
	CreateTime       string
}{
	ChartThemeID:     "chart_theme_id",
	ChartThemeName:   "chart_theme_name",
	ChartThemeTypeID: "chart_theme_type_id",
	ChartImage:       "chart_image",
	Config:           "config",
	IsDelete:         "is_delete",
	SysUserID:        "sys_user_id",
	SysUserRealName:  "sys_user_real_name",
	IsSystemTheme:    "is_system_theme",
	ModifyTime:       "modify_time",
	CreateTime:       "create_time",
}


type ColorsOptions []string

type LegendOptions struct {
	VerticalAlign string `json:"verticalAlign"`
	ItemStyle     struct {
		Color        string `json:"color"`
		FontSize     int    `json:"fontSize"`
		Cursor       string `json:"cursor"`
		FontWeight   string `json:"fontWeight"`
		TextOverflow string `json:"textOverflow"`
	} `json:"itemStyle"`
}

type TitleOptions struct {
	Align string `json:"align"`
	Style struct {
		Color    string `json:"color"`
		FontSize int    `json:"fontSize"`
	} `json:"style"`
}

type MarkerOptions struct {
	Style struct {
		Color    string `json:"color"`
		FontSize int    `json:"fontSize"`
	} `json:"style"`
}

type AxisOptions struct {
	Style struct {
		Color    string `json:"color"`
		FontSize int    `json:"fontSize"`
	} `json:"style"`
}

type DrawOption struct {
	PlotBackgroundColor string `json:"plotBackgroundColor"`
}

type LineOptions struct {
	DashStyle string  `json:"dashStyle"`
	LineWidth int     `json:"lineWidth"`
	LineType  string  `json:"lineType"`
	Radius    float64 `json:"radius"`
}

type OldChartOptions struct {
	ColorsOptions  []string         `json:"colorsOptions"`
	LineOptions    LineOptions      `json:"lineOptions"`
	LegendOptions  interface{}      `json:"legendOptions"`
	TitleOptions   interface{}      `json:"titleOptions"`
	MarkerOptions  interface{}      `json:"markerOptions"`
	XAxisOptions   interface{}      `json:"xAxisOptions"`
	YAxisOptions   interface{}      `json:"yAxisOptions"`
	DrawOption     interface{}      `json:"drawOption"`
	LineOptionList []LineStyleOptions `json:"lineOptionList"`
}

type NewChartOptions struct {
	OldChartOptions
	LineOptionList []NewLineOptions `json:"lineOptionList"`
}

type NewLineOptions struct {
	LineOptions
	Color     string `json:"color"`
	DataMark  string `json:"dataMark"`
	MarkType  string `json:"markType"`
	MarkSize  int    `json:"markSize"`
	MarkColor string `json:"markColor"`
}

type LineStyleOptions struct {
	DashStyle string `json:"dashStyle"`
	Color     string `json:"color"`
	LineWidth int    `json:"lineWidth"`
	LineType  string `json:"lineType"`
	Radius    int `json:"radius"`
	DataMark  string `json:"dataMark"`
	MarkType  string `json:"markType"`
	MarkSize  int `json:"markSize"`
	MarkColor string `json:"markColor"`
}