package vercel_webhook

import (
	"context"
	"time"

	"github.com/tidbcloud/ecosystem-service/internal/metric"
	vercelDB "github.com/tidbcloud/ecosystem-service/internal/storage/db/vercel"
	"github.com/tidbcloud/pkgv2/logid"
	"github.com/tidbcloud/tiinf/monitor/tilog"
	"go.uber.org/zap"
)

type VercelWebhookMetricWorker struct {
	branchTaskDAO vercelDB.BranchTaskDAO
}

func NewVercelWebhookMetricWorker(branchTaskDAO vercelDB.BranchTaskDAO) *VercelWebhookMetricWorker {
	return &VercelWebhookMetricWorker{
		branchTaskDAO: branchTaskDAO,
	}
}

func (w *VercelWebhookMetricWorker) GetInterval() time.Duration {
	return time.Minute * 1
}

func (w *VercelWebhookMetricWorker) GetName() string {
	return "VercelWebhookMetricWorker"
}

func (w *VercelWebhookMetricWorker) Run(ctx context.Context) (err error) {
	ctx = logid.WithLogid(ctx, logid.GenLogid())
	logger := tilog.WithContextL(ctx).With(zap.String("worker", w.GetName()))
	logger.Info("start collect vercel metrics from db")

	taskStatus, err := w.branchTaskDAO.CountTasksByStatus(ctx)
	if err != nil {
		logger.Error("fail to collect metrics from vercel task", zap.Error(err))
		return err
	}

	for _, b := range taskStatus {
		metric.VercelWebhookTaskGauge.WithLabelValues(string(b.Status)).Set(float64(b.Count))
	}

	logger.Info("finish collect vercel metrics from db")
	return nil
}
