package cmek

import (
	"context"

	globalngv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
	"github.com/tidbcloud/tidb-management-service/nextgen-global-service/domain/service/encryptionkey"
)

func NewServer(
	encryptionKeySvc encryptionkey.Service,
) globalngv1.CustomerManagedEncryptionKeyServiceServer {
	return &server{
		encryptionKeySvc: encryptionKeySvc,
	}
}

type server struct {
	encryptionKeySvc encryptionkey.Service
}

func (s server) GetCmekAccessIamPrincipal(ctx context.Context,
	request *globalngv1.GetCmekAccessIamPrincipalRequest,
) (*globalngv1.CmekAccessIamPrincipal, error) {
	return s.encryptionKeySvc.GetCmekAccessIamPrincipal(ctx, request)
}

func (s server) VerifyCmekAccessIamPrincipal(ctx context.Context,
	request *globalngv1.VerifyCmekAccessIamPrincipalRequest,
) (*globalngv1.VerifyCmekAccessIamPrincipalResponse, error) {
	return s.encryptionKeySvc.VerifyCmekAccessIamPrincipal(ctx, request)
}

func (s server) GetCustomerManagedEncryptionKey(ctx context.Context,
	request *globalngv1.GetCustomerManagedEncryptionKeyRequest,
) (*globalngv1.CustomerManagedEncryptionKey, error) {
	return s.encryptionKeySvc.GetCustomerManagedEncryptionKey(ctx, request)
}

func (s server) GetCustomerManagedEncryptionKeyByClusterId(ctx context.Context,
	request *globalngv1.GetCustomerManagedEncryptionKeyByClusterIdRequest,
) (*globalngv1.CustomerManagedEncryptionKey, error) {
	return s.encryptionKeySvc.GetCustomerManagedEncryptionKeyByClusterId(ctx, request)
}

func (s server) ListCustomerManagedEncryptionKeys(ctx context.Context,
	request *globalngv1.ListCustomerManagedEncryptionKeysRequest,
) (*globalngv1.ListCustomerManagedEncryptionKeysResponse, error) {
	return s.encryptionKeySvc.ListCustomerManagedEncryptionKeys(ctx, request)
}
