package keyspacerole

import (
	"context"

	dmpbv1 "github.com/tidbcloud/cluster-service-ng/api/tidbcloud/dataplane-manager/v1"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/consts"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

type keyspaceRoleProvider interface {
	apply(ctx context.Context, spec *keyspaceRoleSpec) error
	get(ctx context.Context, dataplaneID, keyspaceName, roleName string) (*dmpbv1.KeyspaceRole, error)
	delete(ctx context.Context, dataplaneID, roleName string) error
}

type awsKeyspaceRoleProvider struct {
	local client.Client
}

type alicloudKeyspaceRoleProvider struct {
	local client.Client
}

func (s *server) provider() keyspaceRoleProvider {
	if s.config.Provider == consts.ProviderTypeACK {
		return alicloudKeyspaceRoleProvider{local: s.local}
	}
	return awsKeyspaceRoleProvider{local: s.local}
}

type keyspaceRoleSpec struct {
	dataplaneID    string
	keyspaceName   string
	roleName       string
	roleARN        string
	rolePolicyName string
	accountID      string
	providerConfig string
	provider       string
	assumeRoleARN  string
	externalID     string
	bucketName     string
	allowedPrefix  string
	labels         map[string]string
	annotations    map[string]string
	cloudTags      map[string]string
}
