package opworker

import (
	"context"
	"fmt"
	"time"

	"github.com/tidbcloud/account/central/utils"
	"go.opentelemetry.io/otel"

	"github.com/tidbcloud/account/central/jobqueue"
	"github.com/tidbcloud/account/commons/config"
	"go.uber.org/zap"
)

type SQSMonitorWorker struct{ GlobalWorker }

type HeartBeat struct {
	Msg string `json:"msg"`
}

func (w SQSMonitorWorker) Run(ctx context.Context) error {
	err := w.pingJobQueue()
	return err
}

func (w SQSMonitorWorker) pingJobQueue() error {

	ctx, span := otel.Tracer(config.TraceComponentNameWorker).Start(context.Background(), "SQSMonitorWorker")
	defer span.End()
	bm := utils.Begin(ctx, "SQSMonitorWorker")
	defer bm.OnExit(ctx)
	start := time.Now()
	err := jobqueue.Enqueue(ctx, config.JobHeartBeatSignal, HeartBeat{
		Msg: "heartbeat",
	})
	if err != nil {
		w.logger.Error("job queue is down", zap.Error(err))
		return err
	}
	diff := time.Since(start)
	w.logger.Info(fmt.Sprintf("send message successfully in %d ms", diff.Milliseconds()))
	return nil
}
