package core

import (
	"database/sql"

	"github.com/linlexing/dbx/ddb"

	"github.com/linlexing/dbx/common"
)

func queryUserDeptAndTag(db common.Queryer, name string) (dept, tag string, err error) {
	var vDept, vTag sql.NullString
	if err = db.QueryRow("select dept,tag from nuser where name=?", name).
		Scan(&vDept, &vTag); err != nil {
		return
	}
	dept = vDept.String
	tag = vTag.String
	return
}
func queryUserRoles(db common.Queryer, name string) (rev []string, err error) {
	rev, err = ddb.ScanStrings(db, "select rolename from userrole where username=?", name)
	return
}
func queryUserElements(db common.Queryer, name string) (rev []*UserElement, err error) {
	rows, err := db.Query(
		`select distinct a.name,a.label,a.category,a.newwindow
		from element a inner join roleele b on a.name = b.elename
			inner join userrole c on b.rolename=c.rolename
		where c.username=?`, name)
	if err != nil {
		return
	}
	defer rows.Close()
	rev = []*UserElement{}
	for rows.Next() {
		var vName, vLabel, vCategory sql.NullString
		var vNewWindow sql.NullInt64
		if err = rows.Scan(
			&vName,
			&vLabel,
			&vCategory,
			&vNewWindow); err != nil {
			return
		}
		rev = append(rev, &UserElement{
			Name:      vName.String,
			Label:     vLabel.String,
			Category:  vCategory.String,
			NewWindow: vNewWindow.Int64 > 0,
		})
	}
	return
}
