package schedule

import (
	"context"
	"time"

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

func ClusterMetaTask() Task {
	return Task{
		Name:          constants.ClusterMetaTaskName,
		start:         config.GetConfig().InstanceMeteringConfig.StartTime,
		interval:      time.Minute,
		immediately:   true,
		execute:       instancemetering.ExecuteClusterMetaTask,
		nextTimestamp: NextExecuteTimestamp,
		ready:         Ready,
	}
}

func NextExecuteTimestamp(ctx context.Context, checkpoint int64, start int64) int64 {
	if checkpoint == 0 {
		if start > 0 {
			return start
		}
		return LastMinuteTimestamp(time.Now().Unix())
	}

	return checkpoint + 60
}

func Ready(ctx context.Context, timestamp int64) bool {
	return timestamp < time.Now().Unix()
}

func LastMinuteTimestamp(timestamp int64) int64 {
	return timestamp / 60 * 60
}
