package entity

type (
	UserRole          string
	EntityStatus      string
	Oauth2GrantType   string
	Oauth2GrantStatus uint8
	ApplicationType   string
)

const (
	// FE use
	UserRoleOwner           UserRole = "owner"
	UserRoleMember          UserRole = "member"
	UserRoleBillingAdmin    UserRole = "billing_admin"
	UserRoleAuditAdmin      UserRole = "audit_admin"
	UserRoleImpersonated    UserRole = "impersonated"
	UserRoleProjectOwner    UserRole = "project_owner"
	UserRoleProjectDev      UserRole = "project_developer"
	UserRoleProjectReadOnly UserRole = "project_readonly"

	Active  EntityStatus = "active"
	Delete  EntityStatus = "delete"
	Pending EntityStatus = "pending"

	// Role binding roles
	RoleBindingFixedRoleImpersonated = "impersonated"
	RoleOrgOwner                     = "org:owner"
	RoleOrgMember                    = "org:member"
	RoleOrgBillingAdmin              = "org:billing_admin"
	RoleOrgAuditAdmin                = "org:audit_admin"
	RoleOrgImpersonated              = "org:impersonated"
	RoleProjectOwner                 = "project:owner"
	RoleProjectDev                   = "project:dev"
	RoleProjectReadOnly              = "project:readonly"

	Oauth2AuthorizationCode Oauth2GrantType = "authorization_code"
	Oauth2DeviceCode        Oauth2GrantType = "device_code"

	Oauth2GrantStatusPending Oauth2GrantStatus = 0
	Oauth2GrantStatusApprove Oauth2GrantStatus = 1
	Oauth2GrantStatusDeny    Oauth2GrantStatus = 2

	ApplicationTypeCloud ApplicationType = "TiDB Cloud"
	ApplicationTypeDemo  ApplicationType = "Demo"
	ApplicationTypeOther ApplicationType = "Other"
)

var GrantTypeFormString = map[string]Oauth2GrantType{
	string(Oauth2AuthorizationCode): Oauth2AuthorizationCode,
	string(Oauth2DeviceCode):        Oauth2DeviceCode,
}
