package metering

import (
	"context"
	"time"

	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/entity"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

type ClusterMeteringRepo interface {
	LoadAndLockLatestOne(ctx context.Context, clusterID uint64) (*entity.ClusterMetering, bizerr.BizError)
	LoadLatest(ctx context.Context, clusterID uint64) (*entity.ClusterMetering, bizerr.BizError)
	Save(ctx context.Context, heartbeats ...*entity.ClusterMetering) bizerr.BizError
	Clean(ctx context.Context, before time.Time, limit int) (int64, bizerr.BizError)
}

type ReportRecordRepo interface {
	LoadUnsyncedRecords(ctx context.Context, cursor uint64, limit int) ([]*entity.BillingReportRecord, bizerr.BizError)
	Save(ctx context.Context, records ...*entity.BillingReportRecord) bizerr.BizError
	MarkSynced(ctx context.Context, ids ...uint64) bizerr.BizError
	Clean(ctx context.Context, before time.Time, limit int) (int64, bizerr.BizError)
}
