package cluster

import (
	"context"

	globalserverlessv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/serverless/v1"
	regionalserverlessv1 "github.com/tidbcloud/tidb-management-service/api/spec/regional/serverless/v1"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

func (svc *clusterServiceImpl) CheckCloudStoragePermission(
	ctx context.Context,
	req *globalserverlessv1.CheckCloudStoragePermissionRequest,
) (*globalserverlessv1.CheckCloudStoragePermissionResponse, error) {
	ctx, span := Tracer.Start(ctx, "Domain.CheckCloudStoragePermission")
	defer span.End()

	if req.CloudStorage == nil {
		return nil, bizerr.New(bizerr.ErrCodeParams, "empty cloud storage in request")
	}
	if req.ClusterId == "" {
		return nil, bizerr.New(bizerr.ErrCodeParams, "empty cluster ID in request")
	}

	cluster, err := svc.clusterRepo.Get(ctx, req.GetClusterId(), false)
	if err != nil {
		return nil, err
	}

	request := &regionalserverlessv1.CheckCloudStoragePermissionRequest{
		CloudStorage: req.CloudStorage,
		ClusterId:    req.ClusterId,
	}

	switch req.FeatureName {
	case globalserverlessv1.CheckCloudStoragePermissionRequest_FEATURE_NAME_AUDITLOG:
		request.FeatureName = regionalserverlessv1.CheckCloudStoragePermissionRequest_DATABASE_AUDIT_LOG
	case globalserverlessv1.CheckCloudStoragePermissionRequest_FEATURE_NAME_EXPORT:
		request.FeatureName = regionalserverlessv1.CheckCloudStoragePermissionRequest_EXPORT
	case globalserverlessv1.CheckCloudStoragePermissionRequest_FEATURE_NAME_CHANGEFEED:
		request.FeatureName = regionalserverlessv1.CheckCloudStoragePermissionRequest_CHANGEFEED
	default:
		return nil, bizerr.New(bizerr.ErrCodeParams, "feature name not supported")
	}

	_, err = svc.regionalService.CheckCloudStoragePermission(ctx, cluster.Region, request)
	if err != nil {
		return nil, err
	}
	return &globalserverlessv1.CheckCloudStoragePermissionResponse{}, nil
}
