package logredactionpolicy

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/cluster"
	logredactionpolicysvc "github.com/tidbcloud/tidb-management-service/nextgen-global-service/domain/service/logredactionpolicy"
)

func NewServer(
	logredactionpolicySvc logredactionpolicysvc.Service,
	clusterSvc cluster.Service,
) globalngv1.LogRedactionPolicyServiceServer {
	return &server{
		logredactionpolicySvc: logredactionpolicySvc,
		clusterSvc:            clusterSvc,
	}
}

type server struct {
	logredactionpolicySvc logredactionpolicysvc.Service
	clusterSvc            cluster.Service
}

func (s *server) GetLogRedactionPolicy(
	ctx context.Context,
	req *globalngv1.GetLogRedactionPolicyRequest,
) (*globalngv1.LogRedactionPolicy, error) {
	config, err := s.logredactionpolicySvc.GetLogRedactionPolicy(ctx, req.GetClusterId())
	if err != nil {
		return nil, err
	}
	return config, nil
}

func (s *server) UpdateLogRedactionPolicy(
	ctx context.Context,
	req *globalngv1.UpdateLogRedactionPolicyRequest,
) (*globalngv1.LogRedactionPolicy, error) {
	config, err := s.logredactionpolicySvc.UpdateLogRedactionPolicy(
		ctx,
		req.GetLogRedactionPolicy(),
		req.GetValidateOnly(),
	)
	if err != nil {
		return nil, err
	}
	return config, nil
}
