package models

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

type WxUserRaiLabelRedis struct {
	UserId           int       `description:"用户ID"`
	SourceId         int       `description:"资源ID"`
	Label            string    `description:"标签内容"`
	SourceType       int       `description:"来源1:搜索关键字标签、2:产业/个股标签(线下活动)、3:产业/个股标签(线下路演)、4:产业/个股标签(线上活动)、5:产业/个股标签(线上路演)、6:销售输入标签、7:产业/个股标签(报告)、8:报告类型标签"`
	CreateTime       time.Time `description:"创建时间"`
	RegisterPlatform int       `description:"来源 1小程序，2：网页"`
	TableName        string    `description:"数据来源的表名"`
}

type WxUserRaiLabel struct {
	RaiLabelId       int       `orm:"column(rai_label_id);pk"`
	UserId           int       `description:"用户ID"`
	RealName         string    `description:"用户实际名称"`
	Mobile           string    `description:"手机号"`
	Email            string    `description:"邮箱"`
	CompanyId        int       `description:"公司id"`
	CompanyName      string    `description:"公司名称"`
	Label            string    `description:"标签内容"`
	SourceId         int       `description:"来源ID"`
	SourceType       int       `description:"来源1:搜索关键字标签、2:产业/个股标签(线下活动)、3:产业/个股标签(线下路演)、4:产业/个股标签(线上活动)、5:产业/个股标签(线上路演)、6:销售输入标签、7:产业/个股标签(报告)、8:报告类型标签"`
	SysUserId        int       `description:"创建人id"`
	SysUserRealName  string    `description:"创建人名称"`
	CreateTime       time.Time `description:"创建时间"`
	ModifyTime       time.Time `description:"更新时间"`
	RegisterPlatform int       `description:"来源 1小程序，2：网页"`
	TableName        string    `description:"数据来源的表名"`
}

// 标签记录表，所有内容都不删除
type WxUserRaiLabelLog struct {
	RaiLabelId       int       `orm:"column(rai_label_id);pk"`
	UserId           int       `description:"用户ID"`
	RealName         string    `description:"用户实际名称"`
	Mobile           string    `description:"手机号"`
	Email            string    `description:"邮箱"`
	CompanyId        int       `description:"公司id"`
	CompanyName      string    `description:"公司名称"`
	Label            string    `description:"标签内容"`
	SourceId         int       `description:"来源ID"`
	SourceType       int       `description:"来源1:搜索关键字标签、2:产业/个股标签(线下活动)、3:产业/个股标签(线下路演)、4:产业/个股标签(线上活动)、5:产业/个股标签(线上路演)、6:销售输入标签、7:产业/个股标签(报告)、8:报告类型标签"`
	SysUserId        int       `description:"创建人id"`
	SysUserRealName  string    `description:"创建人名称"`
	CreateTime       time.Time `description:"创建时间"`
	ModifyTime       time.Time `description:"更新时间"`
	RegisterPlatform int       `description:"来源 1小程序，2：网页"`
	TableName        string    `description:"数据来源的表名"`
}

// 添加
func AddWxUserRaiLabel(item *WxUserRaiLabel) (err error) {
	o, err := orm.NewOrm().Begin()
	if err != nil {
		return
	}
	defer func() {
		fmt.Println(err)
		if err == nil {
			o.Commit()
		} else {
			o.Rollback()
		}
	}()

	//删除原有数据
	sql := ` DELETE FROM wx_user_rai_label WHERE user_id = ? AND label = ?  `
	_, err = o.Raw(sql, item.UserId, item.Label).Exec()
	if err != nil {
		return
	}

	_, err = o.Insert(item)

	if err != nil {
		return
	}

	itemLog := new(WxUserRaiLabelLog)
	itemLog.UserId = item.UserId
	itemLog.RealName = item.RealName
	itemLog.Mobile = item.Mobile
	itemLog.Email = item.Email
	itemLog.CompanyId = item.CompanyId
	itemLog.CompanyName = item.CompanyName
	itemLog.Label = item.Label
	itemLog.SourceId = item.SourceId
	itemLog.SourceType = item.SourceType
	itemLog.SysUserId = item.SysUserId
	itemLog.SysUserRealName = item.SysUserRealName
	itemLog.CreateTime = item.CreateTime
	itemLog.ModifyTime = item.ModifyTime
	itemLog.RegisterPlatform = item.RegisterPlatform
	itemLog.TableName = item.TableName
	_, err = o.Insert(itemLog)
	return
}

// 批量插入
func AddWxUserRaiLabelMulti(items []*WxUserRaiLabel, label []string, userId int) (err error) {
	o, err := orm.NewOrm().Begin()
	if err != nil {
		return
	}
	defer func() {
		if err == nil {
			o.Commit()
		} else {
			o.Rollback()
		}
	}()

	var itemLogs []*WxUserRaiLabelLog
	for _, item := range items {
		itemLog := new(WxUserRaiLabelLog)
		itemLog.UserId = item.UserId
		itemLog.RealName = item.RealName
		itemLog.Mobile = item.Mobile
		itemLog.Email = item.Email
		itemLog.CompanyId = item.CompanyId
		itemLog.CompanyName = item.CompanyName
		itemLog.Label = item.Label
		itemLog.SourceId = item.SourceId
		itemLog.SourceType = item.SourceType
		itemLog.SysUserId = item.SysUserId
		itemLog.SysUserRealName = item.SysUserRealName
		itemLog.CreateTime = item.CreateTime
		itemLog.ModifyTime = item.ModifyTime
		itemLog.RegisterPlatform = item.RegisterPlatform
		itemLog.TableName = item.TableName
		itemLogs = append(itemLogs, itemLog)
	}

	if len(label) > 0 {
		//删除老的数据信息
		sql := ` DELETE FROM wx_user_rai_label WHERE user_id = ? AND  label IN ('` + strings.Join(label, "','") + `')  `
		_, err = o.Raw(sql, userId).Exec()
		if err != nil {
			return
		}
	}

	//批量插入新的关联数据
	if len(items) > 0 {
		//批量添加流水信息
		_, err = o.InsertMulti(len(items), items)
		if err != nil {
			return
		}

		_, err = o.InsertMulti(len(itemLogs), itemLogs)
		if err != nil {
			return
		}
	}

	return
}

// 批量插入(脚本)
func AddWxUserRaiLabelLogMultiInit(items []*WxUserRaiLabelLog) (err error) {
	o, err := orm.NewOrm().Begin()
	if err != nil {
		return
	}
	defer func() {
		if err == nil {
			o.Commit()
		} else {
			o.Rollback()
		}
	}()

	//批量插入新的关联数据
	if len(items) > 0 {
		//批量添加流水信息
		_, err = o.InsertMulti(len(items), items)
		if err != nil {
			return
		}
	}

	return
}

// 批量插入(脚本)
func AddWxUserRaiLabelMultiInit(items []*WxUserRaiLabel) (err error) {
	o, err := orm.NewOrm().Begin()
	if err != nil {
		return
	}
	defer func() {
		if err == nil {
			o.Commit()
		} else {
			o.Rollback()
		}
	}()

	//批量插入新的关联数据
	if len(items) > 0 {
		//批量添加流水信息
		_, err = o.InsertMulti(len(items), items)
		if err != nil {
			return
		}
	}

	return
}

// 文章标签表（业务用不到，跑数据使用，别删）
type WxUserRaiArticleLabel struct {
	Id         int       `orm:"column(id);pk"`
	ArticleId  int       `description:"报告id"`
	Label      string    `description:"标签内容"`
	CreateTime time.Time `description:"创建时间"`
	SourceType int       `description:"来源1:搜索关键字标签、2:产业/个股标签(线下活动)、3:产业/个股标签(线下路演)、4:产业/个股标签(线上活动)、5:产业/个股标签(线上路演)、6:销售输入标签、7:产业/个股标签(报告)、8:报告类型标签"`
}

// 批量插入(脚本)
func AddWxUserRaiArticleLabelMultiInit(items []*WxUserRaiArticleLabel) (err error) {
	o, err := orm.NewOrm().Begin()
	if err != nil {
		return
	}
	defer func() {
		if err == nil {
			o.Commit()
		} else {
			o.Rollback()
		}
	}()

	//批量插入新的关联数据
	if len(items) > 0 {
		//批量添加流水信息
		_, err = o.InsertMulti(len(items), items)
		if err != nil {
			return
		}
	}

	return
}

// 列表
func GetWxUserRaiArticleLabelCrm16_5() (items []*WxUserRaiArticleLabel, err error) {
	o := orm.NewOrm()
	sql := `SELECT
			article_id 
		FROM
			wx_user_rai_article_label 
		GROUP BY
			article_id `
	_, err = o.Raw(sql).QueryRows(&items)
	return
}

// 列表
func GetWxUserRaiArticleLabelAllCrm16_5() (items []*WxUserRaiArticleLabel, err error) {
	o := orm.NewOrm()
	sql := `SELECT
			article_id,label,source_type
		FROM
			wx_user_rai_article_label  `
	_, err = o.Raw(sql).QueryRows(&items)
	return
}

// 列表
func GetWxUserRaiLabelLogAll() (items []*WxUserRaiLabelLog, err error) {
	o := orm.NewOrm()
	sql := `SELECT
			*
		FROM
			wx_user_rai_label_log   ORDER BY create_time DESC   `
	_, err = o.Raw(sql).QueryRows(&items)
	return
}
