package service

import (
	"context"
	"strconv"

	"github.com/tidbcloud/pkgv2/bizerr"
	tidbmgmtservicev1 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_mgmt_service/v1"
)

// ListClusterCDCJobs returns the CDC custom statuses registered on a cluster.
func (s *cdcService) ListClusterCDCJobs(
	ctx context.Context,
	clusterID string,
) ([]*tidbmgmtservicev1.ClusterCustomStatus, bizerr.BizError) {
	clusterIDUint, err := strconv.ParseUint(clusterID, 10, 64)
	if err != nil {
		return nil, bizerr.New(bizerr.ErrCodeParams, "invalid cluster id %s", clusterID)
	}
	return s.mgmtSvc.ListClusterCDCCustomStatuses(ctx, clusterIDUint)
}

// DeleteClusterCDCJob deletes one CDC custom status by id. This is the ops escape
// hatch to clear a residual lock that blocks a user cluster from being deleted.
func (s *cdcService) DeleteClusterCDCJob(
	ctx context.Context,
	clusterID string,
	statusID uint64,
) bizerr.BizError {
	clusterIDUint, err := strconv.ParseUint(clusterID, 10, 64)
	if err != nil {
		return bizerr.New(bizerr.ErrCodeParams, "invalid cluster id %s", clusterID)
	}
	if statusID == 0 {
		return bizerr.New(bizerr.ErrCodeParams, "invalid status id")
	}
	return s.mgmtSvc.DeleteClusterCustomStatus(ctx, clusterIDUint, statusID)
}
