package entity

type AdminRole uint

const (
	AdminSuperAdminRole AdminRole = iota + 1
	AdminAdminRole
	AdminAgentRole
)

var AdminRoleStrings = map[AdminRole]string{
	AdminSuperAdminRole: "super-admin",
	AdminAdminRole:      "admin",
	AdminAgentRole:      "agent",
}

func (s AdminRole) String() string {
	return AdminRoleStrings[s]
}

func (s AdminRole) IsValid() bool {
	return s > 0 && int(s) <= len(AdminRoleStrings)
}

// AllAdminRole returns a slice containing all string values of AdminRole.
func AllAdminRole() []string {
	roleStrings := make([]string, len(AdminRoleStrings))
	for role, str := range AdminRoleStrings {
		roleStrings[int(role)-1] = str
	}

	return roleStrings
}

// MapToAdminRole converts a string to the corresponding AdminRole value.
func MapToAdminRole(roleStr string) AdminRole {
	for role, str := range AdminRoleStrings {
		if str == roleStr {
			return role
		}
	}

	return AdminRole(0)
}
