package cluster

import (
	"context"

	globaldedicatedv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/dedicated/v1"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

func (svc *service) GetLogRedactionPolicy(
	ctx context.Context,
	clusterId uint64,
) (*globaldedicatedv1.LogRedactionPolicy, error) {
	spanName := "ClusterService.GetLogRedactionPolicy"
	ctx, span := tracer.Start(ctx, spanName)
	defer span.End()

	if clusterId == 0 {
		return nil, bizerr.New(bizerr.ErrCodeParams, "cluster id is invalid")
	}

	return svc.dedicatedCli.GetLogRedactionPolicy(ctx, &globaldedicatedv1.GetLogRedactionPolicyRequest{
		ClusterId: clusterId,
	})
}

func (svc *service) UpdateLogRedactionPolicy(
	ctx context.Context,
	policy *globaldedicatedv1.LogRedactionPolicy,
) (*globaldedicatedv1.LogRedactionPolicy, error) {
	spanName := "ClusterService.UpdateLogRedactionPolicy"
	ctx, span := tracer.Start(ctx, spanName)
	defer span.End()

	if policy == nil {
		return nil, bizerr.New(bizerr.ErrCodeParams, "log redaction policy is invalid")
	}
	if policy.GetClusterId() == 0 {
		return nil, bizerr.New(bizerr.ErrCodeParams, "cluster id is invalid")
	}
	if policy.RedactLog == nil {
		return nil, bizerr.New(bizerr.ErrCodeParams, "redact log policy is required")
	}
	return svc.dedicatedCli.UpdateLogRedactionPolicy(ctx, &globaldedicatedv1.UpdateLogRedactionPolicyRequest{
		LogRedactionPolicy: policy,
	})
}
