package data_manage

import (
	"eta/eta_api/global"
	"eta/eta_api/utils"
	"fmt"
	"gorm.io/gorm"
)

type HisugarData struct {
	InputValue string `orm:"column(DATA_VALUE)" description:"日期"`
	DataTime   string `orm:"column(DATA_DATE)" description:"值"`
}

func GetEdbDataHisugarMaxOrMinDate(edbCode string) (minDate, maxDate string, err error) {
	//o := orm.NewOrmUsingDB("data")
	sql := ` SELECT MIN(data_time) AS minDate,MAX(data_time) AS maxDate FROM edb_data_hisugar WHERE edb_code=? `
	//err = o.Raw(sql, edbCode).QueryRow(&minDate, &maxDate)
	var maxAndMinDate MaxAndMinDate
	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbCode).First(&maxAndMinDate).Error
	if err != nil {
		return
	}
	minDate = maxAndMinDate.MinDate.Format(utils.FormatDate)
	maxDate = maxAndMinDate.MaxDate.Format(utils.FormatDate)
	return
}

type BaseFromHisugarIndexItem struct {
	//BaseFromSciIndexId int    `orm:"column(base_from_hisugar_index_id);pk"` // 主键,自动递增
	BaseFromSciIndexId int    `gorm:"column:base_from_hisugar_index_id;primaryKey"` // 主键,自动递增
	IndexCode          string // 指标编码
	IndexName          string // 指标名称
	ClassifyId         int    // 分类Id
	Unit               string // 单位
	Frequency          string // 频度
	Describe           string // 指标描述
	CreateTime         string // 创建时间
	ModifyTime         string // 修改时间
}

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

	return
}
func (m *BaseFromHisugarIndexItem) ConvDateTimeStr() {
	m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)

	return
}

// GetBaseInfoFromHisugarByIndexCode 获取指标信息
func GetBaseInfoFromHisugarByIndexCode(indexCode string) (item *BaseFromHisugarIndexItem, err error) {
	//o := orm.NewOrmUsingDB("data")
	sql := `SELECT * FROM base_from_hisugar_index WHERE index_code=? `
	sql = fmt.Sprintf(sql)
	//err = o.Raw(sql, indexCode).QueryRow(&item)
	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexCode).First(&item).Error
	if err != nil {
		return
	}
	item.ConvDateTimeStr()

	return
}