package models

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

type CygxChartCollect struct {
	Id          int       `orm:"column(id);pk"`
	ChartId     int       `description:"图表ID"`
	UserId      int       `description:"用户ID"`
	CreateTime  time.Time `description:"创建时间"`
	Mobile      string    `description:"手机号"`
	Email       string    `description:"邮箱"`
	CompanyId   int       `description:"公司id"`
	CompanyName string    `description:"公司名称"`
	RealName    string    `description:"用户实际名称"`
	SellerName  string    `description:"所属销售"`
}
type CygxChartCollectByCygx struct {
	Id          int       `orm:"column(id);pk"`
	ChartId     int       `description:"图表ID"`
	UserId      int       `description:"用户ID"`
	CreateTime  time.Time `description:"创建时间"`
	Mobile      string    `description:"手机号"`
	Email       string    `description:"邮箱"`
	CompanyId   int       `description:"公司id"`
	CompanyName string    `description:"公司名称"`
	RealName    string    `description:"用户实际名称"`
	SellerName  string    `description:"所属销售"`
}

//添加收藏信息
func AddCygxChartCollect(item *CygxChartCollect) (lastId int64, err error) {
	o, err := orm.NewOrm().Begin()
	if err != nil {
		return
	}
	defer func() {
		if err == nil {
			o.Commit()
		} else {
			o.Rollback()
		}
	}()
	lastId, err = o.Insert(item)
	if err != nil {
		return
	}
	//添加查研观向来源的记录
	itemCygx := new(CygxChartCollectByCygx)
	itemCygx.ChartId = item.ChartId
	itemCygx.UserId = item.UserId
	itemCygx.RealName = item.RealName
	itemCygx.CreateTime = time.Now()
	itemCygx.Mobile = item.Mobile
	itemCygx.Email = item.Email
	itemCygx.CompanyId = item.CompanyId
	itemCygx.CompanyName = item.CompanyName
	lastId, err = o.Insert(itemCygx)
	if err != nil {
		return
	}
	return
}

type ChartCollectResp struct {
	Status       int `description:"1:收藏,2:取消收藏"`
	CollectCount int `description:"收藏总数"`
}

//移除
func RemoveChartCollect(userId, ChartId int) (err error) {
	o, err := orm.NewOrm().Begin()
	if err != nil {
		return
	}
	defer func() {
		if err == nil {
			o.Commit()
		} else {
			o.Rollback()
		}
	}()
	sql := `DELETE FROM cygx_chart_collect WHERE user_id=? AND chart_id=? `
	_, err = o.Raw(sql, userId, ChartId).Exec()
	if err != nil {
		return
	}
	sql = `DELETE FROM cygx_chart_collect_by_cygx WHERE user_id=? AND chart_id=? `
	_, err = o.Raw(sql, userId, ChartId).Exec()
	return
}

func GetChartCountByUserId(userId, chartID int) (count int, err error) {
	sql := `SELECT COUNT(1) AS count FROM cygx_chart_collect WHERE user_id=? AND chart_id=? `
	err = orm.NewOrm().Raw(sql, userId, chartID).QueryRow(&count)
	return
}

func GetChartCountByUser(userId int) (count int, err error) {
	sql := `SELECT COUNT(1) AS count FROM cygx_chart_collect WHERE user_id=?  `
	err = orm.NewOrm().Raw(sql, userId).QueryRow(&count)
	return
}

type CygxChartTop struct {
	Id          int       `orm:"column(id);pk"`
	ChartId     int       `description:"图表ID"`
	UserId      int       `description:"用户ID"`
	CreateTime  time.Time `description:"创建时间"`
	Mobile      string    `description:"手机号"`
	Email       string    `description:"邮箱"`
	CompanyId   int       `description:"公司id"`
	CompanyName string    `description:"公司名称"`
	RealName    string    `description:"用户实际名称"`
	SellerName  string    `description:"所属销售"`
}

//添加置顶信息
func AddCygxChartTop(item *CygxChartTop) (lastId int64, err error) {
	o := orm.NewOrm()
	lastId, err = o.Insert(item)
	return
}

type ChartTopresp struct {
	Status       int `description:"1:收藏,2:取消收藏"`
	CollectCount int `description:"收藏总数"`
}

func RemoveChartTop(userId, ChartId int) (err error) {
	o := orm.NewOrm()
	sql := `DELETE FROM cygx_chart_top WHERE user_id=? AND chart_id=? `
	_, err = o.Raw(sql, userId, ChartId).Exec()
	return
}

func GetChartTopCountByUserId(userId, chartID int) (count int, err error) {
	sql := `SELECT COUNT(1) AS count FROM cygx_chart_top WHERE user_id=? AND chart_id=? `
	err = orm.NewOrm().Raw(sql, userId, chartID).QueryRow(&count)
	return
}

func RemoveChartCollectByMobile(mobile string) (err error) {
	o := orm.NewOrm()
	sql := `DELETE FROM cygx_chart_collect WHERE mobile IN  (` + mobile + `)`
	_, err = o.Raw(sql).Exec()
	return
}

//批量添加收藏信息
func AddCygxChartCollectList(items []*CygxChartCollect) (lastId int64, err error) {
	o := orm.NewOrm()
	_, err = o.InsertMulti(1, items)
	return
}

//获取列表信息根据手机号分组
func GetCygxChartCollectByMobileList() (items []*CygxChartCollect, err error) {
	o := orm.NewOrm()
	sql := `SELECT * FROM cygx_chart_collect GROUP BY mobile  `
	_, err = o.Raw(sql).QueryRows(&items)
	return
}

//修改用户收藏文章的相关信息
func UpdateCygxChartCollect(wxUser *WxUserItem) (err error) {
	o := orm.NewOrm()
	sql := `UPDATE cygx_chart_collect SET email=?,company_id=?,company_name=?,user_id=?,real_name=? WHERE mobile=? `
	_, err = o.Raw(sql, wxUser.Email, wxUser.CompanyId, wxUser.CompanyName, wxUser.UserId, wxUser.RealName, wxUser.Mobile).Exec()
	return
}

//获取列表
func GetCygxChartCollectList() (items []*CygxChartCollect, err error) {
	o := orm.NewOrm()
	sql := `SELECT * FROM cygx_chart_collect   `
	_, err = o.Raw(sql).QueryRows(&items)
	return
}