package authuser

import (
	"context"

	"github.com/pingcap/dbaas/central/db/entity"
	"github.com/pingcap/dbaas/central/db/tenant"
	"github.com/pingcap/errors"
	"github.com/tidbcloud/pkgv2/auth/auth0"
)

// GetUserFromContext gets the tenant.User from context if exists.
func GetUserFromContext(ctx context.Context) (*tenant.User, error) {
	claimsIFace := ctx.Value(auth0.AuthTokenClaimKey)
	if claimsIFace == nil {
		return nil, errors.New("user not in context")
	}
	user, ok := claimsIFace.(*tenant.User)
	if !ok {
		return nil, errors.New("expect type tenant.User in context")
	}
	return user, nil
}

// CheckAdminPermission checks whether context contains an Admin permission user.
func CheckAdminPermission(ctx context.Context) bool {
	u, err := GetUserFromContext(ctx)
	if err != nil {
		return false
	}
	if u.User.TenantID == entity.PingCAPTenantID {
		return true
	}
	return false
}
