package system

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

type SysTeamAddReq struct {
	GroupId      int    `description:"大组id"`
	DepartmentId int    `description:"部门id"`
	TeamName     string `description:"分组名称,多个用英文逗号隔开"`
}

type SysTeam struct {
	GroupId      int       `orm:"column(group_id);pk" description:"分组ID"`
	ParentId     int       `description:"父级Id"`
	DepartmentId int       `description:"部门id"`
	GroupName    string    `description:"分组名称"`
	CreateTime   time.Time `description:"创建时间"`
}

func GetSysTeamCount(groupId int, teamName string) (count int, err error) {
	sql := `SELECT COUNT(1) AS count FROM sys_group WHERE parent_id=? AND group_name=? `
	o := orm.NewOrm()
	err = o.Raw(sql, groupId, teamName).QueryRow(&count)
	return
}

type SysTeamEditReq struct {
	TeamId   int    `description:"分组ID"`
	TeamName string `description:"分组名称"`
}

func GetSysTeamByName(teamName string) (item *SysGroup, err error) {
	sql := `SELECT * FROM sys_group WHERE group_name=? `
	o := orm.NewOrm()
	err = o.Raw(sql, teamName).QueryRow(&item)
	return
}

func ModifySysTeam(teamName string, teamId int) (err error) {
	o := orm.NewOrm()
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()
	sql := `UPDATE sys_group SET group_name=? WHERE group_id=? `
	_, err = to.Raw(sql, teamName, teamId).Exec()
	sql = `UPDATE admin SET group_name=? WHERE group_id=? `
	_, err = to.Raw(sql, teamName, teamId).Exec()
	return
}

type SysTeamDeleteReq struct {
	TeamId int `description:"小组ID"`
}

type SysTeamList struct {
	GroupId    int       `orm:"column(group_id);pk" json:"DepartmentId" description:"小组ID"`
	ParentId   int       `json:"GroupId" description:"小组Id"`
	GroupName  string    `json:"DepartmentName" description:"分组名称"`
	CreateTime time.Time `description:"创建时间"`
}

func GetSysTeamByDepartmentId(groupId int) (items []*SysTeamList, err error) {
	sql := `SELECT * FROM sys_group WHERE parent_id=? ORDER BY sort ASC, create_time ASC`
	o := orm.NewOrm()
	_, err = o.Raw(sql, groupId).QueryRows(&items)
	return
}

func ClearSysUserTeam(groupId int) (err error) {
	sql := `UPDATE admin SET group_id=0,group_name='' WHERE group_id=? `
	o := orm.NewOrm()
	_, err = o.Raw(sql, groupId).Exec()
	return
}