package clientv2

import (
	"context"

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

type ttlClient interface {
	// RegisterTTLTask notifies the manager that a table with TTL information has been created.
	RegisterTTLTask(ctx context.Context, tableID int64, ttlJobEnable bool) error
	// DeleteTTLTableInfo notifies the manager that a table no longer has TTL settings or has been dropped.
	DeleteTTLTableInfo(ctx context.Context, tableID int64) error
	// RecycleTTLTask notifies the manager that a TTL task has been completed.
	RecycleTTLTask(ctx context.Context, finishTime uint64) error
	// UpdateTTLJobEnable notifies the manager that the user's 'tidb_ttl_job_enable' variable has been updated.
	UpdateTTLJobEnable(ctx context.Context, ttlJobEnable bool) error
}

var _ ttlClient = &client{}

func (c *client) RegisterTTLTask(ctx context.Context, tableID int64, ttlJobEnable bool) error {
	req := &scalerpb.RegisterTTLTaskRequest{
		Header:       requestHeader(c),
		TableId:      tableID,
		TtlJobEnable: ttlJobEnable,
	}
	resp, err := c.grpcClient.RegisterTTLTask(ctx, req)
	return getError("RegisterTTLTask", err, resp)
}

func (c *client) DeleteTTLTableInfo(ctx context.Context, tableID int64) error {
	req := &scalerpb.DeleteTTLTableInfoRequest{
		Header:  requestHeader(c),
		TableId: tableID,
	}
	resp, err := c.grpcClient.DeleteTTLTableInfo(ctx, req)
	return getError("DeleteTTLTableInfo", err, resp)
}

func (c *client) RecycleTTLTask(ctx context.Context, finishTime uint64) error {
	req := &scalerpb.RecycleTTLTaskRequest{
		Header:     requestHeader(c),
		FinishTime: finishTime,
	}
	resp, err := c.grpcClient.RecycleTTLTask(ctx, req)
	return getError("RecycleTTLTask", err, resp)
}

func (c *client) UpdateTTLJobEnable(ctx context.Context, ttlJobEnable bool) error {
	req := &scalerpb.UpdateTTLJobEnableRequest{
		Header:       requestHeader(c),
		TtlJobEnable: ttlJobEnable,
	}
	resp, err := c.grpcClient.UpdateTTLJobEnable(ctx, req)
	return getError("UpdateTTLJobEnable", err, resp)
}
