package cluster

import (
	"context"

	"github.com/tidbcloud/tiinf/monitor/tilog"
	"go.uber.org/zap"

	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) UpdateAuditLogConfig(
	ctx context.Context,
	req *globalserverlessv1.UpdateAuditLogConfigRequest,
) (*globalserverlessv1.UpdateAuditLogConfigResponse, error) {
	ctx, span := Tracer.Start(ctx, "Domain.UpdateAuditLogConfig")
	defer span.End()

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

	tilog.Info(ctx, "UpdateAuditLogConfig", zap.Any("request", req))

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

	request := &regionalserverlessv1.ServerlessRegionalServiceUpdateClusterRequest{
		ClusterId:      req.ClusterId,
		AuditLogConfig: req.AuditLogConfig,
		ProjectId:      cluster.ProjectId,
	}

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