package company

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

// CompanyRenewalRecord
// @Description: 客户续约状态记录表
type CompanyRenewalRecord struct {
	Id              int       `orm:"column(id);pk"`
	CompanyId       int       `description:"客户id"`
	ProductId       int       `description:"产品id"`
	Source          int       `description:"类型,枚举值,1:续约异常客户;2:续约正常客户;3:超时续约客户"`
	SellerId        int       `description:"销售id"`
	SellerName      string    `description:"销售名称"`
	ShareSellerId   int       `description:"共享销售id"`
	ShareSellerName string    `description:"共享销售名称"`
	CreateTime      time.Time `description:"创建时间"`
	ModifyTime      time.Time `description:"修改时间"`
}

type UnusualRenewCompanyGroup struct {
	SellerId      int `description:"所属销售id"`
	ShareSellerId int `description:"所属共享销售id"`
	//AdminName string `description:"所属销售名称"`
	Num        int    `description:"汇总次数"`
	CompanyIds string `description:"客户id字符串"`
}

// GetUnusualRenewCompanyList 获取销售未续约数据
func GetUnusualRenewCompanyList(startDate, endDate time.Time, productId int) (list []*CompanyRenewalRecord, err error) {
	o := orm.NewOrm()
	sql := `	SELECT
	*
	FROM
	company_renewal_record 
WHERE
	modify_time BETWEEN ? 
	AND ? 
    AND source = 1 
	AND product_id = ?;
`
	_, err = o.Raw(sql, startDate, endDate, productId).QueryRows(&list)

	return
}

// GetUnusualRenewCompanyByShareSellerList 获取销售未续约数据
func GetUnusualRenewCompanyByShareSellerList(startDate, endDate time.Time, productId, source int) (list []*UnusualRenewCompanyGroup, err error) {
	o := orm.NewOrm()
	sql := `	SELECT
	a.seller_id,a.share_seller_id,
	count(
	DISTINCT ( a.company_id )) num,
	GROUP_CONCAT( DISTINCT a.company_id SEPARATOR ',' ) AS company_ids 
	FROM
	company_renewal_record as a
WHERE
	a.modify_time BETWEEN ? 
	AND ? 
    AND a.source = ? 
	AND a.product_id = ?
GROUP BY
	a.share_seller_id;
`
	_, err = o.Raw(sql, startDate, endDate, source, productId).QueryRows(&list)

	return
}

// Add
// @Description: 添加续约用户记录
// @author: Roc
// @datetime 2023-12-07 14:16:37
// @param item *CompanyRenewalRecord
// @return err error
func (item *CompanyRenewalRecord) Add() (err error) {
	o := orm.NewOrm()
	lastId, err := o.Insert(item)
	if err != nil {
		return
	}
	item.Id = int(lastId)

	return
}

type GetUnusualRenewListGroupMonth struct {
	Date       string
	CompanyNum int
}

type GetUnusualRenewListGroupMonthResp struct {
	List []*GetUnusualRenewListGroupMonth
}

// GetUnusualRenewList 获取未续约公司列表
func GetUnusualRenewList(startDate, endDate time.Time, productId, source int, sellerIds string) (list []*CompanyRenewalRecord, err error) {
	o := orm.NewOrm()
	sql := `SELECT
	* 
FROM
	company_renewal_record 
WHERE
	source = ? 
	AND modify_time BETWEEN ? 
	AND ? 
	AND product_id = ?
	AND (share_seller_id in (` + sellerIds + `)
	OR seller_id in (` + sellerIds + `))

`
	_, err = o.Raw(sql, source, startDate, endDate, productId).QueryRows(&list)

	return
}

func (item *CompanyRenewalRecord) InsertMulti(items []*CompanyRenewalRecord) (err error) {
	o := orm.NewOrm()
	_, err = o.InsertMulti(len(items), items)
	return
}