package regionalapi

import (
	"context"

	ticdc_v1 "github.com/tidbcloud/infra-provider/api/tidbcloud/ticdc-service/v1"
	"github.com/tidbcloud/pkgv2/bizerr"
)

const (
	testNetworkConnectionPath        = "/ticdc-service/api/v1/ticdcPrecheck/testConnection"
	validateChangefeedParametersPath = "/ticdc-service/api/v1/ticdcPrecheck/validateChangefeedParams"
	verifyTablePath                  = "/ticdc-service/api/v1/ticdcPrecheck/verifyTable"
)

type TiCDCPreCheckClientImpl struct {
	regionalCli RegionalClient
}

func NewTiCDCPreCheckClient(regionalCli RegionalClient) TiCDCPreCheckClient {
	return &TiCDCPreCheckClientImpl{
		regionalCli: regionalCli,
	}
}

func (m *TiCDCPreCheckClientImpl) TestNetworkConnection(
	ctx context.Context, region *Region, req *ticdc_v1.TestNetworkConnectionRequest,
) bizerr.BizError {
	return m.regionalCli.Post(ctx, region, testNetworkConnectionPath, nil, nil, req, nil)
}

func (m *TiCDCPreCheckClientImpl) ValidateChangefeedParameters(
	ctx context.Context, region *Region, req *ticdc_v1.ValidateChangefeedParametersRequest,
) bizerr.BizError {
	return m.regionalCli.Post(ctx, region, validateChangefeedParametersPath, nil, nil, req, nil)
}

func (m *TiCDCPreCheckClientImpl) VerifyTable(
	ctx context.Context, region *Region, req *ticdc_v1.VerifyTableRequest,
) (*ticdc_v1.VerifyTableResponse, bizerr.BizError) {
	resp := new(ticdc_v1.VerifyTableResponse)
	if err := m.regionalCli.Post(ctx, region, verifyTablePath, nil, nil, req, resp); err != nil {
		return nil, err
	}
	return resp, nil
}
