package excel

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

// ExcelInfo excel表格详情表
type ExcelInfo struct {
	ExcelInfoId     int       `orm:"column(excel_info_id);pk"`
	Source          int       `description:"表格来源，1：excel插件的表格，2：自定义表格，3：混合表格，4：自定义分析，默认：1"`
	ExcelType       int       `description:"表格类型，1：指标列，2：日期列，默认：1"`
	ExcelName       string    `description:"表格名称"`
	UniqueCode      string    `description:"表格唯一编码"`
	ExcelClassifyId int       `description:"表格分类id"`
	SysUserId       int       `description:"操作人id"`
	SysUserRealName string    `description:"操作人真实姓名"`
	Content         string    `description:"表格内容"`
	ExcelImage      string    `description:"表格图片"`
	FileUrl         string    `description:"表格下载地址"`
	Sort            int       `description:"排序字段，数字越小越排前面"`
	IsDelete        int       `description:"是否删除，0：未删除，1：已删除"`
	ModifyTime      time.Time `description:"最近修改日期"`
	CreateTime      time.Time `description:"创建日期"`
}

// GetNoContentExcelInfoAll 获取不含content的表格列表 用于分类展示
func GetNoContentExcelInfoAll(source, userId int) (items []*ExcelClassifyItems, err error) {
	o := orm.NewOrm()
	sql := ` SELECT excel_info_id,excel_classify_id,excel_name AS excel_classify_name,
             unique_code,sys_user_id,sys_user_real_name
            FROM excel_info where is_delete=0 AND source = ?  `

	pars := []interface{}{source}

	if userId > 0 {
		sql += ` AND sys_user_id = ? `
		pars = append(pars, userId)
	}
	sql += `  ORDER BY sort asc,create_time desc `
	_, err = o.Raw(sql, pars...).QueryRows(&items)
	return
}

// UpdateExcelInfoClassifyId 更改表格分类
func UpdateExcelInfoClassifyId(classifyId, excelInfoId int) (err error) {
	o := orm.NewOrm()
	sql := ` update excel_info set excel_classify_id = ? WHERE excel_info_id=? `
	_, err = o.Raw(sql, classifyId, excelInfoId).Exec()

	return
}

// GetAllExcelInfoBySource 根据来源获取包含content的表格列表
func GetAllExcelInfoBySource(source int) (items []*ExcelInfo, err error) {
	o := orm.NewOrm()
	sql := ` SELECT * FROM excel_info where is_delete=0  AND source = ?  ORDER BY sort asc,create_time desc `
	_, err = o.Raw(sql, source).QueryRows(&items)
	return
}

// TableDataReq 自定义表格请求参数
type TableDataReq struct {
	EdbInfoIdList []int             `description:"指标id列表，从左至右，从上到下的顺序"`
	Sort          int               `description:"日期排序，1：倒序，2：正序"`
	Data          []EdbInfoData     `description:"数据列表"`
	TextRowData   [][]ManualDataReq `description:"文本列表"`
}

// EdbInfoData 自定义表格的数据
type EdbInfoData struct {
	EdbInfoId    int             `description:"指标ID"`
	Tag          string          `description:"标签"`
	EdbName      string          `description:"指标名称"`
	EdbAliasName string          `description:"指标别名"`
	Frequency    string          `description:"频度"`
	Unit         string          `description:"单位"`
	Data         []ManualDataReq `description:"单元格数据列表"`
}

// ManualDataReq 自定义表格的单元格数据
type ManualDataReq struct {
	DataType            int               `description:"数据类型，1：普通的，2：插值法，3：手动输入，4：公式计算，5：预测值"`
	DataTime            string            `description:"所属日期"`
	DataTimeType        int               `description:"日期类型，1：实际日期；2：未来日期"`
	ShowValue           string            `description:"展示值"`
	Value               string            `description:"实际值（计算公式）"`
	RelationEdbInfoList []RelationEdbInfo `description:"关联指标（计算公式中关联的指标，用于计算的时候去匹配）"`
}

// RelationEdbInfo 自定义表格中单元格的关联指标
type RelationEdbInfo struct {
	Tag string `description:"指标标签"`
	Row string `description:"第几行"`
}

// MixedTableReq 混合表格保存请求参数
type MixedTableReq struct {
	CellRelation string                    `description:"单元格关系"`
	Data         [][]MixedTableCellDataReq `description:"混合表格单元格参数"`
}

// MixedTableCellDataReq 混合表格单元格参数
type MixedTableCellDataReq struct {
	Uid          string `description:"单元格唯一标识"`
	DataType     int    `description:"数据类型，1：日期，2：指标，3：自定义文本，4：插值"`
	DataTime     string `description:"所属日期"`
	DataTimeType int    `description:"日期类型：0：手动输入日期；1：导入系统日期；；3：导入指标日期（指标库的最新日期）；"`
	EdbInfoId    int    `description:"指标id"`
	ShowValue    string `description:"展示值"`
	Value        string `description:"实际值"`
}
