package schedule

import (
	"context"
	"time"

	"github.com/tidbcloud/metering/pkg/common/config"
	"github.com/tidbcloud/metering/pkg/common/constants"
	"github.com/tidbcloud/metering/pkg/facade"
	"github.com/tidbcloud/metering/pkg/instancemetering"
)

func InstanceReportTask() Task {
	return Task{
		Name:          constants.ReportTaskName,
		start:         config.GetConfig().InstanceMeteringConfig.StartTime,
		interval:      time.Minute,
		immediately:   true,
		execute:       instancemetering.ExecuteBillingReportTask,
		nextTimestamp: NextExecuteTimestamp,
		ready:         InstanceReportExecuteReady,
	}
}

func InstanceReportExecuteReady(ctx context.Context, timestamp int64) bool {
	dependencyTS, err := facade.GetCheckpointReaderWriter(ctx).GetCheckpoint(ctx, constants.BillingTaskName)
	if err != nil {
		panic(err)
	}

	// cluster meta done
	return timestamp < time.Now().Unix() &&
		dependencyTS > 0 &&
		timestamp <= dependencyTS
}
