package data_manage

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

type BaseFromSciHqData struct {
	SciHqDataId          int       `orm:"column(sci_hq_data_id);pk" gorm:"primaryKey"`
	BaseFromSciHqIndexId int       `description:"指标id"`
	IndexCode            string    `description:"指标编码"`
	DataTime             string    `description:"数据日期"`
	Value                float64   `description:"数据值"`
	CreateTime           time.Time `description:"创建时间"`
	ModifyTime           time.Time `description:"修改时间"`
	DataTimestamp        int64     `description:"数据时间戳"`
}

func (obj *BaseFromSciHqData) AfterFind(tx *gorm.DB) (err error) {
			obj.DataTime = utils.GormDateStrToDateStr(obj.DataTime)
	return
}

// GetSciHqDataByIndexId 根据指标id获取指标数据
func GetSciHqDataByIndexId(indexId int) (items []*BaseFromSciHqData, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := ` SELECT * FROM base_from_sci_hq_data WHERE base_from_sci_hq_index_id=? ORDER BY data_time DESC`
	err = o.Raw(sql, indexId).Find(&items).Error
	return
}

// GetSciHqDataDataTimeByIndexId 根据指标id获取指标数据的日期列表
func GetSciHqDataDataTimeByIndexId(indexIdList []int) (items []string, err error) {
	if len(indexIdList) == 0 {
		return
	}
	o := global.DbMap[utils.DbNameIndex]
	sql := ` SELECT DISTINCT data_time FROM base_from_sci_hq_data WHERE base_from_sci_hq_index_id IN (` + utils.GetOrmInReplace(len(indexIdList)) + `) ORDER BY data_time DESC`
	err = o.Raw(sql, indexIdList).Find(&items).Error
	if err != nil {
		return
	}
		for i := range items {
			items[i] = utils.GormDateStrToDateStr(items[i])
		}
	return
}

func GetSciHqIndexDataByCode(indexCode string) (items []*BaseFromSciHqData, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := ` SELECT *  FROM base_from_sci_hq_data WHERE index_code=? ORDER BY data_time DESC  `
	err = o.Raw(sql, indexCode).Find(&items).Error
	return
}

func GetSciHqIndexDataCount(indexCode string) (count int, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := ` SELECT COUNT(1) AS count  FROM base_from_sci_hq_data WHERE index_code=? `
	err = o.Raw(sql, indexCode).Scan(&count).Error
	return
}