package models

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

type CygxActivitySpecialSignup struct {
	Id          int       `orm:"column(id);pk"`
	ActivityId  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 SignupSpecialStatus struct {
	ActivityId    int    `description:"活动ID"`
	HasPermission int    `description:"操作方式,1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请"`
	PopupMsg      string `description:"权限弹窗信息"`
	PopupMsg2     string `description:"权限弹窗信息"`
	Status        int    `description:"返回类型,1:添加,2:取消"`
	SellerMobile  string `description:"销售电话"`
	SellerName    string `description:"销售姓名"`
	SignupStatus  int    `description:"返回状态:1:成功 、2 :人数已满 、3:调研次数已用完、 4:超时"`
}

//添加
func AddCygxActivitySpecialSignup(item *CygxActivitySpecialSignup) (err error) {
	o := orm.NewOrm()
	_, err = o.Insert(item)
	return
}

//获取某一用户的报名的数量
func GetUserCygxActivitySpecialSignup(uid, activityId int) (count int, err error) {
	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_special_signup  WHERE  user_id=?  AND   activity_id =? `
	o := orm.NewOrm()
	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
	return
}

//删除
func DeleteCygxActivitySpecialSignup(uid, activityId int) (err error) {
	o := orm.NewOrm()
	sql := `DELETE  FROM cygx_activity_special_signup   WHERE   user_id=?   AND  activity_id=?    `
	_, err = o.Raw(sql, uid, activityId).Exec()
	return
}

//列表
func GetActivityListSpecialAll(activityId int) (items []*CygxActivitySpecialSignup, err error) {
	o := orm.NewOrm()
	sql := `SELECT art.*  FROM cygx_activity_special_signup as art WHERE 1= 1 AND  activity_id = ?  GROUP BY company_id`
	_, err = o.Raw(sql, activityId).QueryRows(&items)
	return
}

//列表
func GetActivityListSpecialByActivityId(activityId int) (items []*CygxActivitySpecialSignup, err error) {
	o := orm.NewOrm()
	sql := `SELECT art.*  FROM cygx_activity_special_signup as art WHERE 1= 1 AND  activity_id = ? `
	_, err = o.Raw(sql, activityId).QueryRows(&items)
	return
}

type CygxActivitySpecialSignupResp struct {
	Id          int       `orm:"column(id);pk"`
	ActivityId  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:"所属销售"`
	Count       string    `description:"所属销售"`
}

//列表
func GetActivityListSpecialGroupByMobile(condition string, pars []interface{}) (items []*CygxActivitySpecialSignupResp, err error) {
	o := orm.NewOrm()
	sql := `SELECT s.*,	COUNT( 1 ) AS count   FROM cygx_activity_special_signup as s INNER JOIN cygx_activity_special AS a ON a.activity_id = s.activity_id
			INNER JOIN wx_user AS u ON u.user_id = s.user_id ` + condition + `  GROUP BY s.mobile`
	_, err = o.Raw(sql, pars).QueryRows(&items)
	return
}

//列表
func GetActivityListSpecialGroupByCompanyId(condition string, pars []interface{}) (items []*CygxActivitySpecialSignupResp, err error) {
	o := orm.NewOrm()
	sql := `SELECT *,	COUNT( 1 ) AS count   FROM cygx_activity_special_signup   as s INNER JOIN cygx_activity_special AS a ON a.activity_id = s.activity_id
			INNER JOIN wx_user AS u ON u.user_id = s.user_id ` + condition + `  GROUP BY s.company_id`
	_, err = o.Raw(sql, pars).QueryRows(&items)
	return
}

// UpdateActivitySpecialSignupNumMulti 批量修改专项调研感兴趣的人数排名
func UpdateActivitySpecialSignupNumMulti(items []*CygxActivitySpecialSignupResp) (err error) {
	o := orm.NewOrm()
	p, err := o.Raw("UPDATE cygx_activity_special_signup SET user_num = ? WHERE mobile = ?").Prepare()
	if err != nil {
		return
	}
	defer func() {
		_ = p.Close() // 别忘记关闭 statement
	}()
	for _, v := range items {
		_, err = p.Exec(v.Count, v.Mobile)
		if err != nil {
			return
		}
	}
	return
}

// UpdateActivitySpecialSignupCompanyIdMulti 批量修改专项调研感兴趣的用户的对应公司ID
func UpdateActivitySpecialSignupCompanyIdMulti(items []*WxUser) (err error) {
	o := orm.NewOrm()
	p, err := o.Raw("UPDATE cygx_activity_special_signup SET company_id = ? WHERE mobile = ?").Prepare()
	if err != nil {
		return
	}
	defer func() {
		_ = p.Close() // 别忘记关闭 statement
	}()
	for _, v := range items {
		_, err = p.Exec(v.CompanyId, v.Mobile)
		if err != nil {
			return
		}
	}
	return
}

// UpdateActivitySpecialSignupCompanyNumMulti 批量修改专项调研感兴趣的公司对应的数量
func UpdateActivitySpecialSignupCompanyNumMulti(items []*CygxActivitySpecialSignupResp) (err error) {
	o := orm.NewOrm()
	p, err := o.Raw("UPDATE cygx_activity_special_signup SET company_num = ? WHERE company_id = ?").Prepare()
	if err != nil {
		return
	}
	defer func() {
		_ = p.Close() // 别忘记关闭 statement
	}()
	for _, v := range items {
		_, err = p.Exec(v.Count, v.CompanyId)
		if err != nil {
			return
		}
	}
	return
}