package utils

import (
	"errors"

	"github.com/tidbcloud/account/internel/dao/entity"
)

const (
	ErrIllegalRole = "The role is illegal."
)

func RoleBindingListToStrings(roles []entity.RoleBinding, exts ...[]string) []string {
	sizeRoles := len(roles)
	sizeTotal := sizeRoles
	sizeExtends := make([]int, len(exts))
	for i, ext := range exts {
		l := len(ext)
		sizeExtends[i] = l
		sizeTotal += l
	}

	result := make([]string, sizeRoles, sizeTotal)

	for i, role := range roles {
		result[i] = role.Role
	}

	for _, roleList := range exts {
		result = append(result, roleList...)
	}

	return result
}

func IsValidUserOrgRole(role string) error {
	_, exist := entity.ValidUserOrgRbacRoles[role]
	if !exist {
		return errors.New(ErrIllegalRole)
	}
	return nil
}

func IsValidUserProjectRole(role string) error {
	_, exist := entity.ValidUserProjectRbacRoles[role]
	if !exist {
		return errors.New(ErrIllegalRole)
	}
	return nil
}

func IsValidClusterRole(role string) error {
	_, exist := entity.ValidClusterRbacRoles[role]
	if !exist {
		return errors.New(ErrIllegalRole)
	}
	return nil
}
