package data_manage

import (
	"eta/eta_api/utils"
	"github.com/beego/beego/v2/client/orm"
	"github.com/rdlucklib/rdluck_tools/paging"
	"time"
)

// BaseFromBusinessIndex
// @Description: 外部指标(商家系统)表
type BaseFromBusinessIndex struct {
	BaseFromBusinessIndexId int64     `orm:"column(base_from_business_index_id);pk"`
	IndexCode               string    `description:"指标编码"`
	IndexName               string    `description:"指标名称"`
	Unit                    string    `description:"单位"`
	Frequency               string    `description:"频度"`
	Source                  int       `description:"数据来源"`
	SourceName              string    `description:"数据来源名称"`
	StartDate               time.Time `description:"开始日期"`
	EndDate                 time.Time `description:"结束日期"`
	Remark                  string    `description:"备注字段"`
	BaseModifyTime          time.Time `description:"基础信息(名称,单位,频度)变更时间"`
	DataUpdateTime          time.Time `description:"最近一次数据发生变化的时间"`
	CreateTime              time.Time `description:"创建时间"`
	ModifyTime              time.Time `description:"修改时间"`
}

var BaseFromBusinessIndexCols = struct {
	BaseFromBusinessIndexId string
	IndexCode               string
	IndexName               string
	Unit                    string
	Frequency               string
	Source                  string
	SourceName              string
	StartDate               string
	EndDate                 string
	Remark                  string
	BaseModifyTime          string
	DataUpdateTime          string
	CreateTime              string
	ModifyTime              string
}{
	BaseFromBusinessIndexId: "base_from_business_index_id",
	IndexCode:               "index_code",
	IndexName:               "index_name",
	Unit:                    "unit",
	Frequency:               "frequency",
	Source:                  "source",
	SourceName:              "source_name",
	StartDate:               "start_date",
	EndDate:                 "end_date",
	Remark:                  "remark",
	BaseModifyTime:          "base_modify_time",
	DataUpdateTime:          "data_update_time",
	CreateTime:              "create_time",
	ModifyTime:              "modify_time",
}

// EdbBusinessSource
// @Description: 自有数据(商家)指标来源
type EdbBusinessSource struct {
	EdbBusinessSourceId int64     `orm:"column(edb_business_source_id);pk"`
	SourceName          string    `description:"来源名称"` // 来源名称
	CreateTime          time.Time `description:"创建时间"` // 创建时间
}

// GetEdbBusinessSourceItem
// @Description: 根据来源名称获取来源信息
// @author: Roc
// @receiver m
// @datetime 2024-04-25 18:09:03
// @param sourceName string
// @return item *EdbBusinessSource
// @return err error
func (m *EdbBusinessSource) GetEdbBusinessSourceItem(sourceName string) (item *EdbBusinessSource, err error) {
	o := orm.NewOrmUsingDB("data")
	sql := `SELECT * FROM edb_business_source WHERE source_name = ? `
	err = o.Raw(sql, sourceName).QueryRow(&item)
	return
}

// GetAllList
// @Description: 获取所有来源列表
// @author: Roc
// @receiver m
// @datetime 2024-05-06 09:21:42
// @return items []*EdbBusinessSource
// @return err error
func (m *EdbBusinessSource) GetAllList() (items []*EdbBusinessSource, err error) {
	o := orm.NewOrmUsingDB("data")
	sql := `SELECT * FROM edb_business_source order by  edb_business_source_id desc `
	_, err = o.Raw(sql).QueryRows(&items)

	return
}

// GetListCount
// @Description: 根据条件获取列表页的总数量
// @author: Roc
// @receiver m
// @datetime 2024-05-06 17:15:28
// @param condition string
// @param pars []interface{}
// @return count int
// @return err error
func (m *BaseFromBusinessIndex) GetListCount(condition string, pars []interface{}) (count int, err error) {
	sql := ` select count(1) as count FROM base_from_business_index as a WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	o := orm.NewOrmUsingDB("data")
	err = o.Raw(sql, pars).QueryRow(&count)

	return
}

// GetList
// @Description: 根据条件获取列表页的数据
// @author: Roc
// @receiver m
// @datetime 2024-05-06 17:15:42
// @param condition string
// @param pars []interface{}
// @param startSize int
// @param pageSize int
// @return items []*BaseFromBusinessIndex
// @return err error
func (m *BaseFromBusinessIndex) GetList(condition string, pars []interface{}, startSize, pageSize int) (items []*BaseFromBusinessIndex, err error) {
	sql := `select * FROM base_from_business_index AS a  WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	sql += ` order by a.base_from_business_index_id desc limit ?,? `
	o := orm.NewOrmUsingDB("data")
	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)

	return
}

// BusinessIndexListResp
// @Description: 外部(商家)指标列表返回
type BusinessIndexListResp struct {
	List   []*BaseFromBusinessIndexItem
	Paging *paging.PagingItem `description:"分页数据"`
}

// BaseFromBusinessIndexItem
// @Description: 外部指标(商家系统)结构
type BaseFromBusinessIndexItem struct {
	BaseFromBusinessIndexId int64  `orm:"column(base_from_business_index_id);pk"`
	IndexCode               string `description:"指标编码"`
	IndexName               string `description:"指标名称"`
	Unit                    string `description:"单位"`
	Frequency               string `description:"频度"`
	Source                  int    `description:"数据来源"`
	SourceName              string `description:"数据来源名称"`
	StartDate               string `description:"开始日期"`
	EndDate                 string `description:"结束日期"`
	Remark                  string `description:"备注字段"`
	BaseModifyTime          string `description:"基础信息(名称,单位,频度)变更时间"`
	DataUpdateTime          string `description:"最近一次数据发生变化的时间"`
	CreateTime              string `description:"创建时间"`
	ModifyTime              string `description:"修改时间"`
	EdbInfoId               int    `description:"eta指标库的id"`
	EdbUniqueCode           string `description:"指标库唯一编码"`
	EdbClassifyId           int    `description:"指标库分类ID"`
	EdbExist                int    `description:"指标库是否已添加:0-否;1-是"`
}

func (m *BaseFromBusinessIndex) GetPageItemsByCondition(condition string, pars []interface{}, orderRule string, startSize, pageSize int) (items []*BaseFromBusinessIndexItem, err error) {
	sql := `select a.*,b.edb_info_id,b.unique_code as edb_unique_code,b.classify_id as edb_classify_id FROM base_from_business_index AS a LEFT JOIN edb_info b on a.index_code=b.edb_code AND b.source=? WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	if orderRule == `` {
		sql += ` order by a.base_from_business_index_id desc`
	} else {
		sql += ` order by ` + orderRule
	}
	sql += ` limit ?,? `
	o := orm.NewOrmUsingDB("data")
	_, err = o.Raw(sql, utils.DATA_SOURCE_BUSINESS, pars, startSize, pageSize).QueryRows(&items)

	return
}

// GeItemsByCondition
// @Description: 根据条件获取指定数量的指标
// @author: Roc
// @receiver m
// @datetime 2024-05-06 17:16:02
// @param condition string
// @param pars []interface{}
// @param limitSize int
// @return items []*BaseFromBusinessIndexItem
// @return err error
func (m *BaseFromBusinessIndex) GeItemsByCondition(condition string, pars []interface{}, limitSize int) (items []*BaseFromBusinessIndexItem, err error) {
	if pars == nil {
		pars = make([]interface{}, 0)
	}

	sql := `select a.*,b.edb_info_id,b.unique_code as edb_unique_code,b.classify_id as edb_classify_id FROM base_from_business_index AS a LEFT JOIN edb_info b on a.index_code=b.edb_code AND b.source=? WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	sql += ` order by a.base_from_business_index_id desc `

	if limitSize > 0 {
		sql += " limit ? "
		pars = append(pars, limitSize)
	}

	o := orm.NewOrmUsingDB("data")
	_, err = o.Raw(sql, utils.DATA_SOURCE_BUSINESS, pars).QueryRows(&items)

	return
}

// GetDetailByEdbCode
// @Description: 根据edbCode获取指标详情
// @author: Roc
// @receiver m
// @datetime 2024-05-07 11:00:07
// @param edbCode string
// @return item *BaseFromBusinessIndex
// @return err error
func (m *BaseFromBusinessIndex) GetDetailByEdbCode(edbCode string) (item *BaseFromBusinessIndex, err error) {
	sql := `select *  FROM base_from_business_index  WHERE index_code = ? `
	o := orm.NewOrmUsingDB("data")
	err = o.Raw(sql, edbCode).QueryRow(&item)

	return
}

// BusinessIndexDataListResp
// @Description: 外部(商家)指标数据列表返回
type BusinessIndexDataListResp struct {
	List   []*BaseFromBusinessIndexDataItem
	Paging *paging.PagingItem `description:"分页数据"`
}

// BaseFromBusinessIndexDataItem
// @Description: 外部指标(商家系统)数据结构
type BaseFromBusinessIndexDataItem struct {
	ID        string
	EdbDataId int `orm:"column(edb_data_id);pk"`
	IndexCode string
	DataTime  string
	Value     float64
}