package supply_analysis

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

// VarietyEdbInfo variety_edb_info 品种指标表
type VarietyEdbInfo struct {
	VarietyEdbId int       `orm:"column(variety_edb_id);pk"`
	VarietyId    int       `description:"品种id"`
	EdbName      string    `description:"品种指标名称"`
	Frequency    string    `description:"频度"`
	StartDate    time.Time `description:"开始日期"`
	EndDate      time.Time `description:"结束日期"`
	LatestValue  float64   `description:"最新值"`
	EdbInfoId    int       `description:"指标id"`
	EdbCode      string    `description:"品种编码"`
	Source       int       `description:"来源,1:影响周度产量;2:周度产量变动;3:影响月度产量;4:月度产量变动"`
	ModifyTime   time.Time `description:"更新时间"`
	CreateTime   time.Time `description:"添加时间"`
}

// BatchCreateVarietyEdbInfo 批量插入
func BatchCreateVarietyEdbInfo(list []*VarietyEdbInfo) (err error) {
	num := len(list)
	if num <= 0 {
		return
	}

	o := orm.NewOrmUsingDB("data")
	_, err = o.InsertMulti(num, list)

	return
}

// GetCountVarietyEdbByVarietyId 根据品种id获取添加到已经生成的指标数量(不管是否加入到ETA指标库)
func GetCountVarietyEdbByVarietyId(varietyId int) (total int, err error) {
	o := orm.NewOrmUsingDB("data")
	sql := `SELECT count(1) total FROM variety_edb_info AS a WHERE a.variety_id = ?`
	err = o.Raw(sql, varietyId).QueryRow(&total)
	return
}

// GetVarietyEdbListByVarietyId 根据品种id获取添加到已经生成的指标(不管是否加入到ETA指标库)
func GetVarietyEdbListByVarietyId(varietyId int) (items []*VarietyEdbInfo, err error) {
	o := orm.NewOrmUsingDB("data")
	sql := `SELECT * FROM variety_edb_info AS a WHERE a.variety_id = ?`
	_, err = o.Raw(sql, varietyId).QueryRows(&items)
	return
}

// GetCountVarietyEdbInfoByVarietyId 根据品种id获取添加到ETA指标库的指标数量
func GetCountVarietyEdbInfoByVarietyId(varietyId int) (total int, err error) {
	o := orm.NewOrmUsingDB("data")
	sql := `SELECT count(1) total FROM variety_edb_info AS a
			JOIN edb_info b on a.edb_info_id=b.edb_info_id
			WHERE a.variety_id = ? and a.edb_info_id >0`
	err = o.Raw(sql, varietyId).QueryRow(&total)
	return
}

// VarietyEdbInfoItem 品种指标表(展示使用)
type VarietyEdbInfoItem struct {
	VarietyEdbId int                  `orm:"column(variety_edb_id);pk"`
	VarietyId    int                  `description:"品种id"`
	EdbName      string               `description:"品种指标名称"`
	Frequency    string               `description:"频度"`
	StartDate    string               `description:"开始日期"`
	EndDate      string               `description:"结束日期"`
	LatestValue  float64              `description:"最新值"`
	EdbInfoId    int                  `description:"指标id"`
	UniqueCode   string               `description:"唯一code"`
	EdbCode      string               `description:"品种编码"`
	ClassifyId   int                  `description:"上级分类id"`
	ClassifyName string               `description:"分类名称"`
	Source       int                  `description:"来源,1:影响周度产量;2:周度产量变动;3:影响月度产量;4:月度产量变动" json:"-"`
	ModifyTime   string               `description:"最近一次更新时间"`
	CreateTime   string               `description:"添加时间"`
	Button       VarietyEdbInfoButton `description:"操作按钮权限"`
}

type VarietyEdbInfoButton struct {
	Copy bool `description:"复制数据权限"`
	Show bool `description:"查看数据权限"`
	Add  bool `description:"添加到指标库"`
}

// GetAllVarietyEdbInfoByVarietyId 根据品种id获取所有的指标
func GetAllVarietyEdbInfoByVarietyId(varietyId int) (items []*VarietyEdbInfoItem, err error) {
	o := orm.NewOrmUsingDB("data")
	sql := `SELECT * FROM variety_edb_info AS a WHERE a.variety_id = ? ORDER BY a.variety_edb_id ASC `
	_, err = o.Raw(sql, varietyId).QueryRows(&items)
	return
}

// GetVarietyEdbInfoByVarietyEdbId 根据品种指标id获取的指标
func GetVarietyEdbInfoByVarietyEdbId(varietyId int) (item *VarietyEdbInfo, err error) {
	o := orm.NewOrmUsingDB("data")
	sql := `SELECT * FROM variety_edb_info AS a WHERE a.variety_edb_id = ? ORDER BY a.variety_edb_id ASC `
	err = o.Raw(sql, varietyId).QueryRow(&item)
	return
}

// Update 更基础信息
func (varietyEdbInfo *VarietyEdbInfo) Update(cols []string) (err error) {
	o := orm.NewOrmUsingDB("data")
	_, err = o.Update(varietyEdbInfo, cols...)
	return
}