package VerifyTemplate

import (
	"ColdVerify_local/lib"
	"ColdVerify_local/logs"
	"github.com/beego/beego/v2/adapter/orm"
	orm2 "github.com/beego/beego/v2/client/orm"
	_ "github.com/go-sql-driver/mysql"
	"time"
)

// 模板
type VerifyTemplateMapDataHistory struct {
	Id                     int    `orm:"column(ID);size(11);auto;pk"`
	T_source               int    `orm:"size(4);"`             // 来源 0-所有 1-方案 2-报告 3-表单
	T_task_id              string `orm:"index,size(256);null"` // 任务id
	T_VerifyTemplate_id    string `orm:"size(256);null"`       // 模板id
	T_VerifyTemplateMap_id string `orm:"size(256);null"`       // 标签id
	T_value                string `orm:"type(text);null"`      // 内容
	T_Required             int    `orm:"size(2);default(0)"`   // 必填项  1 必填   0 非必填
	T_Construction         int    `orm:"size(2);default(0)"`   // 实施（是否在APP 上显示）  1 显示   0 不显示

	T_uuid          string `orm:"index,size(256);null"` // 提交人
	T_time          string `orm:"index,size(256);null"` // 提交时间
	T_submit_source int    `orm:"size(4);"`             // 提交来源
	// 验证流程
	T_flow_sort int `orm:"size(2);default(0)"` // 验证流程排序
	T_max_time  int `orm:"size(256);null"`     // 验证流程最大时间
	T_min_time  int `orm:"size(256);null"`     // 验证流程最小时间

	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
}

type VerifyTemplateMapDataHistory_R struct {
	T_id                   int
	T_VerifyTemplateMap_id string // 标签id
	T_source               int
	T_label                int    //
	T_name                 string // 标题
	T_text                 string // 标题
	T_value                string //
	T_Required             int    //
	T_Construction         int    //
	// 验证流程
	T_flow_sort int // 验证流程排序
	T_max_time  int // 验证流程最大时间
	T_min_time  int // 验证流程最小时间
}

func (t *VerifyTemplateMapDataHistory) TableName() string {
	return "verify_template_map_data_history" // 数据库名称   // ************** 替换 FormulaList **************
}

func init() {
	//注册模型
	orm.RegisterModel(new(VerifyTemplateMapDataHistory))

}

// -------------------------------------------------------------
func VerifyTemplateMapToVerifyTemplateMapDataHistory_R(T VerifyTemplateMap) (T_r VerifyTemplateMapDataHistory_R) {
	T_r.T_VerifyTemplateMap_id = T.T_id
	T_r.T_source = T.T_source
	T_r.T_label = T.T_label
	T_r.T_name = T.T_name
	T_r.T_text = T.T_text
	T_r.T_Required = T.T_Required
	T_r.T_Construction = T.T_Construction

	T_r.T_flow_sort = T.T_flow_sort
	T_r.T_max_time = T.T_max_time
	T_r.T_min_time = T.T_min_time

	T_r.T_value = ""
	return T_r
}

func VerifyTemplateMapDataToVerifyTemplateMapDataHistory_R(T VerifyTemplateMap, VerifyTemplateMapDataHistory map[string]string) (T_r VerifyTemplateMapDataHistory_R) {
	T_r.T_VerifyTemplateMap_id = T.T_id
	T_r.T_source = T.T_source
	T_r.T_label = T.T_label
	T_r.T_name = T.T_name
	T_r.T_text = T.T_text
	T_r.T_Required = T.T_Required
	T_r.T_Construction = T.T_Construction

	T_r.T_flow_sort = T.T_flow_sort
	T_r.T_max_time = T.T_max_time
	T_r.T_min_time = T.T_min_time

	T_r.T_value = ""
	if v, ok := VerifyTemplateMapDataHistory[T.T_id]; ok {
		T_r.T_value = v
	}
	return T_r
}

// 获取列表
func Read_VerifyTemplateMapDataHistory_List(T_source int, T_task_id, T_VerifyTemplate_id, T_time string,
	Map_List []VerifyTemplateMap) []VerifyTemplateMapDataHistory_R {

	o := orm.NewOrm()
	// 也可以直接使用 Model 结构体作为表名
	var r []VerifyTemplateMapDataHistory
	qs := o.QueryTable(new(VerifyTemplateMapDataHistory))
	cond := orm.NewCondition()

	cond1 := cond.And("T_task_id", T_task_id).And("T_VerifyTemplate_id", T_VerifyTemplate_id).And("T_time", T_time)

	qs.SetCond((*orm2.Condition)(cond1)).All(&r)

	if len(r) == 0 {
		// 转换
		var VerifyTemplateMapData_r []VerifyTemplateMapDataHistory_R
		for k, v := range Map_List {
			Data_r := VerifyTemplateMapToVerifyTemplateMapDataHistory_R(v)
			Data_r.T_id = k
			VerifyTemplateMapData_r = append(VerifyTemplateMapData_r, Data_r)
		}

		return VerifyTemplateMapData_r
	}

	// 转换
	var VerifyTemplateMapDataHistory_r []VerifyTemplateMapDataHistory_R
	for k, v := range Map_List {
		Data_r := VerifyTemplateMapDataToVerifyTemplateMapDataHistory_R(v, VerifyTemplateMapDataHistoryToMap(r))
		Data_r.T_id = k
		VerifyTemplateMapDataHistory_r = append(VerifyTemplateMapDataHistory_r, Data_r)
	}
	return VerifyTemplateMapDataHistory_r
}

// 获取列表
func Read_MapDataHistory_List(T_source int, T_task_id, T_VerifyTemplate_id, T_time string) []VerifyTemplateMapDataHistory {

	o := orm.NewOrm()
	// 也可以直接使用 Model 结构体作为表名
	var r []VerifyTemplateMapDataHistory
	qs := o.QueryTable(new(VerifyTemplateMapDataHistory))
	cond := orm.NewCondition()

	source := []int{T_source}
	if T_source == 2 {
		source = append(source, 3)
	}
	if T_source != 3 {
		source = append(source, 0)
	}

	cond1 := cond.And("T_source__in", source).And("T_task_id", T_task_id).And("T_VerifyTemplate_id", T_VerifyTemplate_id).And("T_time", T_time)

	qs.SetCond((*orm2.Condition)(cond1)).All(&r)

	return r
}

func VerifyTemplateMapDataHistoryToMap(T []VerifyTemplateMapDataHistory) map[string]string {
	maps := make(map[string]string, len(T))
	for _, v := range T {
		if _, ok := maps[v.T_VerifyTemplateMap_id]; ok {
			continue
		}
		maps[v.T_VerifyTemplateMap_id] = v.T_value
	}
	return maps
}

type VerifyTemplateMapDataHistory_History_List_Res struct {
	T_uuid      string
	T_time      string
	T_uuid_name string
}

// 获取列表
func Read_VerifyTemplateMapDataHistory_History_List(T_task_id string, T_source int, AdminMap map[string]string) (lists []VerifyTemplateMapDataHistory_History_List_Res) {
	o := orm.NewOrm()

	var pl_lists []VerifyTemplateMapDataHistory_History_List_Res
	_, err := o.Raw("SELECT DISTINCT t_uuid,t_time FROM verify_template_map_data_history where t_task_id = ? and t_submit_source = ? order by t_time desc LIMIT 0,1000 ", T_task_id, T_source).
		QueryRows(&pl_lists)
	if err != nil {
		logs.Error(lib.FuncName(), err)
		return pl_lists
	}

	for i := 0; i < len(pl_lists); i++ {
		pl_lists[i].T_uuid_name = AdminMap[pl_lists[i].T_uuid]
	}

	return pl_lists
}
