package common

import (
	"dbweb/core"
	"dbweb/modules/common/recordview"
	"fmt"

	"github.com/linlexing/dbx/ddb"
)

//BatchDelUser 批量删除用户
type BatchDelUser struct{}

func init() {
	core.RegisterFun("batchdeluser", new(BatchDelUser), "_layout/blank")
}

type batchDelUserResult struct {
	Error string
}

//Get 业务
func (d *BatchDelUser) Get(p *core.ElementHandleArgs) {
	callParams := recordview.GetCallParam(p)
	fromEle := core.LoadElement(p.DB, callParams.FromElement)
	p.More["FromElement"] = fromEle
	num, err := callParams.Select.RowCount()
	if err != nil {
		core.LOG.Panic(err)
	}
	p.More["rowCount"] = num
	p.HTML()
}

//Post 业务
func (d *BatchDelUser) Post(p *core.ElementHandleArgs) {
	callParams := recordview.GetCallParam(p)
	result := batchDelUserResult{}
	//添加事务
	dataSQL := callParams.Select.DataSQL()
	if err := ddb.RunAtTx(p.DB, func(tx ddb.Txer) (err error) {
		//删除eleview
		delEle := fmt.Sprintf(
			"delete from eleview del_a where pub=0 and exists(select 1 from (%s) del_b where del_a.owner=del_b.名称)",
			dataSQL)
		if _, err = tx.Exec(delEle); err != nil {
			return
		}
		//删除角色表
		delRole := fmt.Sprintf(
			"delete from userrole del_a where exists(select 1 from (%s) del_b where del_a.username=del_b.名称)",
			dataSQL)
		if _, err = tx.Exec(delRole); err != nil {
			return
		}
		//删除用户表
		delUser := fmt.Sprintf(
			"delete from nuser del_a where exists(select 1 from (%s) del_b where del_a.name=del_b.名称)",
			dataSQL)
		_, err = tx.Exec(delUser)
		return
	}); err != nil {
		result.Error = err.Error()
		p.Render.JSON(200, result)
		return
	}
	p.Render.JSON(200, result)
}
