package repoter

import (
	"context"
	"net/http"

	"github.com/aws/aws-sdk-go-v2/service/sqs"
	"github.com/tidbcloud/metering/pkg/common/models"
)

type BillingRepoterLoader interface {
	LoadRepoterWithTs(ctx context.Context, destfilename string, timestemp int64) ([]*models.BillingReport, error)
	LoadCheckpoint(ctx context.Context, destfilename string) (int64, error)
	SaveCheckpoint(ctx context.Context, destfilename string, checkpoint int64) error
}

type MeasureSender interface {
	//init client for send measure to billing.
	InitMeasureHandler(env string, vendor string, skipclusterid, usesqs bool, url ...string) error
	//send Measure
	SendMeasure(ctx context.Context, billingMeasure models.BillingReport) error
	//check Measure
	CheckMeasure(billingMeasure models.BillingReport) error
}

type sqsClient interface {
	SendMessage(ctx context.Context, params *sqs.SendMessageInput, optFns ...func(*sqs.Options)) (*sqs.SendMessageOutput, error)
}
type httpClient interface {
	Do(req *http.Request) (*http.Response, error)
}

type Repoter interface {
	Report(ctx context.Context, objectname string) error
}
