package cygx

import "github.com/beego/beego/v2/client/orm"

type AdminItem struct {
	AdminId        int    `description:"系统用户id"`
	RealName       string `description:"系统用户姓名"`
	Mobile         string `description:"手机号"`
	RoleType       int    `description:"角色类型:1需要录入指标,0:不需要"`
	RoleId         int    `description:"角色id"`
	RoleName       string `description:"角色名称"`
	RoleTypeCode   string `description:"角色编码"`
	DepartmentId   int    `description:"部门id"`
	DepartmentName string `json:"-" description:"部门名称"`
	GroupId        int    `description:"分组id"`
	GroupName      string `json:"-" description:"分组名称"`
	Authority      int    `description:"管理权限,0:无,1:部门负责人,2:小组负责人"`
	OpenId         string `description:"openId"`
	CompanyName    string `description:"客户名称"`
	UserId         int    `description:"联系人id"`
}

func GetSellerByCompanyId(companyId int) (item *AdminItem, err error) {
	o := orm.NewOrm()
	sql := ` SELECT b.*,c.open_id,c.user_id,a.company_name FROM company_product AS a
			INNER JOIN admin AS b ON a.seller_id=b.admin_id
			LEFT JOIN wx_user AS c ON b.mobile=c.mobile
			WHERE a.company_id=? AND role_type_code LIKE '%rai%'`
	err = o.Raw(sql, companyId).QueryRow(&item)
	return
}

func GetSellerByCompanyIdCheckFicc(companyId, productId int) (item *AdminItem, err error) {
	o := orm.NewOrm()
	sql := ` SELECT b.*,c.open_id,c.user_id,a.company_name FROM company_product AS a
			INNER JOIN admin AS b ON a.seller_id=b.admin_id
			LEFT JOIN wx_user AS c ON b.mobile=c.mobile
			WHERE a.company_id=? AND a.product_id=?`
	err = o.Raw(sql, companyId, productId).QueryRow(&item)
	return
}

func GetSellerByName(userName string) (item *AdminItem, err error) {
	o := orm.NewOrm()
	sql := ` SELECT * FROM admin WHERE real_name=? `
	err = o.Raw(sql, userName).QueryRow(&item)
	return
}

func GetSellerByAdminId(adminId int) (item *AdminItem, err error) {
	o := orm.NewOrm()
	sql := ` SELECT * FROM admin WHERE admin_id=?  `
	err = o.Raw(sql, adminId).QueryRow(&item)
	return
}

// 获取本组的销售ID
func GetSelleridWhichGroup(companyId, productId int) (adminId string, err error) {
	o := orm.NewOrm()
	sql := ` SELECT
			GROUP_CONCAT( DISTINCT admin_id SEPARATOR ',' ) AS adminId
			FROM
			admin
			WHERE
			group_id IN (
			SELECT
			a.group_id
			FROM
			company_product AS a
			INNER JOIN admin AS b ON a.seller_id = b.admin_id
			WHERE
			a.company_id = ?
			AND a.product_id = ?
)`
	err = o.Raw(sql, companyId, productId).QueryRow(&adminId)
	return
}

type CompanyProductDetial struct {
	IsSuspend int    `description:"1:暂停,0:启用"`
	Scale     string `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
}

// 获取对应销售以及销售的手机号
func GetCompanyProductDetail(companyId, productId int) (item *CompanyProductDetial, err error) {
	sql := ` SELECT * FROM company_product WHERE company_id = ? AND product_id = ?; `
	o := orm.NewOrm()
	err = o.Raw(sql, companyId, productId).QueryRow(&item)
	return
}

func GetCompanyDetailById(companyId int) (item *CompanyDetail, err error) {
	sql := ` SELECT a.company_id,a.company_name,b.status,b.seller_id,b.seller_name,c.mobile,p.product_id
            FROM company AS a
			INNER JOIN company_product AS b ON a.company_id=b.company_id
			INNER JOIN company_report_permission AS p ON p.company_id = a.company_id
			INNER JOIN chart_permission AS cp ON cp.chart_permission_id=p.chart_permission_id
			LEFT JOIN admin AS c ON b.seller_id=c.admin_id
			WHERE a.company_id=? AND cp.cygx_auth=1
			OR (a.company_id = ? AND  cp.permission_name = '策略' ) ORDER BY  b.product_id  DESC LIMIT 1` // 兼容永续状态
	o := orm.NewOrm()
	err = o.Raw(sql, companyId, companyId).QueryRow(&item)
	return
}