package clientv2

import (
	"context"

	scalerpb "github.com/tidbcloud/aws-shared-provider/pkg/tidbworker/proto/scaler"
)

type gcClient interface {
	// RegisterGC notifies the manager that a GC task has been registered at deletionTs.
	RegisterGC(ctx context.Context, deletionTs uint64) error
	// RecycleGC notifies the manager that all GC tasks at or before safePoint have been completed.
	RecycleGC(ctx context.Context, safePoint uint64) error
}

var _ gcClient = &client{}

func (c *client) RegisterGC(ctx context.Context, deletionTs uint64) error {
	req := &scalerpb.RegisterGCRequest{
		Header:     requestHeader(c),
		DeletionTs: deletionTs,
	}
	resp, err := c.grpcClient.RegisterGC(ctx, req)
	return getError("RegisterGC", err, resp)
}

func (c *client) RecycleGC(ctx context.Context, safePoint uint64) error {
	req := &scalerpb.RecycleGCRequest{
		Header:    requestHeader(c),
		SafePoint: safePoint,
	}
	resp, err := c.grpcClient.RecycleGC(ctx, req)
	return getError("RecycleGC", err, resp)
}
