package data_stat

import (
	"eta/eta_api/global"
	"eta/eta_api/utils"
)

// EdbInfoStatColumn 数据源统计表自定义列
type EdbInfoStatColumn struct {
	Id           int    `orm:"column(id);pk" gorm:"primaryKey" description:"自增id"`
	ColumnName   string `description:"字段名称"`
	ColumnKey    string `description:"字段"`
	CreateTime   string `description:" 创建时间"`
	ModifyTime   string `description:"修改时间"`
	Type         int    `description:"列表类型:1数据源明细表,2数据源统计表,3删除指标列表,4指标信息变更表"`
	Sort         int    `description:"列排序"`
	IsMust       int    `description:"是否必选列: 0非必选 1必须"`
	IsSort       int    `description:"是否是允许排序的列,0否,1是"`
	IsShow       int    `description:"是否展示:1展示,0不展示"`
	ColumnNameEn string `description:"英文字段名称"`
}

type EdbInfoStatColumnListItem struct {
	Id           int    `description:"自增id"`
	ColumnName   string `description:"字段名称"`
	ColumnKey    string `description:"字段"`
	Type         int    `description:"列表类型:1数据源明细表,2数据源统计表,3删除指标列表,4指标信息变更表"`
	IsMust       int    `description:"是否必选列: 0非必选 1必须"`
	IsSort       int    `description:"是否是允许排序的列,0否,1是"`
	IsShow       int    `description:"是否展示:1展示,0不展示"`
	ColumnNameEn string `description:"英文字段名称"`
}

type StatColumnList struct {
	List []*EdbInfoStatColumnListItem
}

type EditStatColumnReq struct {
	List []*EdbInfoStatColumnListReq
}
type EdbInfoStatColumnListReq struct {
	Id     int `description:"自增id"`
	IsShow int `description:"是否展示:1展示,0不展示"`
}

// GetStatColumn 获取自定义列
func GetStatColumn(columnType int) (list []EdbInfoStatColumn, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM edb_info_stat_column WHERE type=? ORDER BY sort asc, id asc `
	err = o.Raw(sql, columnType).Find(&list).Error
	return
}

// GetAllStatColumn 获取所有自定义列
func GetAllStatColumn() (list []EdbInfoStatColumn, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM edb_info_stat_column ORDER BY sort asc, id asc  `
	err = o.Raw(sql).Find(&list).Error
	return
}

// UpdateStatColumn 批量更新自定义列
func UpdateStatColumn(list []*EdbInfoStatColumn) (err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "UPDATE edb_info_stat_column SET is_show = ?, sort=? WHERE id = ?"
	for _, v := range list {
		err = o.Exec(sql, v.IsShow, v.Sort, v.Id).Error
		if err != nil {
			return
		}
	}
	return
}