package models

import (
	"eta/eta_index_lib/global"
	"eta/eta_index_lib/utils"
	"gorm.io/gorm"
	"time"
)

// PredictEdbRuleData 预测指标,动态规则的计算数据
type PredictEdbRuleData struct {
	PredictEdbRuleDataId int `gorm:"primaryKey;autoIncrement;column:predict_edb_rule_data_id"`
	EdbInfoId            int
	ConfigId             int
	DataTime             string
	Value                string
	CreateTime           time.Time
	ModifyTime           time.Time
	DataTimestamp        int64
}

// AfterFind 在该模型上设置钩子函数,把日期转成正确的string,所以查询函数只能用Find函数,First或者Scan是不会触发该函数的来获取数据
func (m *PredictEdbRuleData) AfterFind(db *gorm.DB) (err error) {
	m.DataTime = utils.GormDateStrToDateStr(m.DataTime)

	return
}

// PredictEdbRuleDataItem 预测指标,动态规则的计算数据
type PredictEdbRuleDataItem struct {
	PredictEdbRuleDataId int `gorm:"primaryKey;autoIncrement;column:predict_edb_rule_data_id"`
	EdbInfoId            int
	ConfigId             int
	DataTime             string
	Value                float64
	CreateTime           time.Time
	ModifyTime           time.Time
	DataTimestamp        int64
}

// AfterFind 在该模型上设置钩子函数,把日期转成正确的string,所以查询函数只能用Find函数,First或者Scan是不会触发该函数的来获取数据
func (m *PredictEdbRuleDataItem) AfterFind(db *gorm.DB) (err error) {
	m.DataTime = utils.GormDateStrToDateStr(m.DataTime)

	return
}

// GetPredictEdbRuleDataItemList 根据基础预测指标id集合 获取 所有的普通指标列表数据
func GetPredictEdbRuleDataItemList(edbInfoId, configId int, startDate, endDate string) (list []*PredictEdbRuleDataItem, err error) {
	var pars []interface{}
	sql := ` SELECT * FROM predict_edb_rule_data WHERE edb_info_id = ? AND config_id = ? `
	pars = append(pars, edbInfoId, configId)
	if startDate != "" {
		sql += ` AND data_time>=? `
		pars = append(pars, startDate)
	}
	if endDate != "" {
		sql += ` AND data_time<=? `
		pars = append(pars, endDate)
	}
	sql += ` ORDER BY data_time ASC `
	err = global.DEFAULT_DB.Raw(sql, pars...).Find(&list).Error

	if err != nil {
		return
	}

	for _, v := range list {
		v.ConvertDate()
	}

	return
}

// GetPredictEdbRuleDataByTo
// @Description: 根据配置id获取数据
// @author: Roc
// @datetime 2024-10-31 15:17:38
// @param to *gorm.DB
// @param configId int
// @return list []*PredictEdbRuleData
// @return err error
func GetPredictEdbRuleDataByTo(to *gorm.DB, configId int) (list []*PredictEdbRuleData, err error) {
	sql := `SELECT * FROM predict_edb_rule_data WHERE config_id = ?`
	err = to.Raw(sql, configId).Find(&list).Error
	return
}

// ConvertDate
// @Description: 日期转换
// @author: Roc
// @receiver m
// @datetime 2024-10-31 15:26:48
func (m *PredictEdbRuleData) ConvertDate() {
	m.DataTime = utils.GormDateStrToDateStr(m.DataTime)

	return
}

// ConvertDate
// @Description: 日期转换
// @author: Roc
// @receiver m
// @datetime 2024-10-31 15:26:59
func (m *PredictEdbRuleDataItem) ConvertDate() {
	m.DataTime = utils.GormDateStrToDateStr(m.DataTime)

	return
}