package vercel_webhook

import (
	"context"
	"time"

	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 VercelWebhookCleanWorker struct {
	branchTaskDao vercelDB.BranchTaskDAO
}

func NewVercelWebhookCleanWorker(branchTaskDao vercelDB.BranchTaskDAO) *VercelWebhookCleanWorker {
	return &VercelWebhookCleanWorker{
		branchTaskDao: branchTaskDao,
	}
}

func (w *VercelWebhookCleanWorker) GetInterval() time.Duration {
	return time.Hour * 24
}

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

func (w *VercelWebhookCleanWorker) Run(ctx context.Context) (err error) {
	ctx = logid.WithLogid(ctx, logid.GenLogid())
	logger := tilog.WithContextL(ctx).With(zap.String("worker", w.GetName()))

	cleanTime := time.Now().Add(-time.Hour * 24 * 30)
	logger.Info("fetch all tasks needs to be clean", zap.Time("clean_time", cleanTime))
	tasks, err := w.branchTaskDao.GetTasksToClean(ctx, cleanTime)
	if err != nil {
		logger.Error("fetch tasks needs to be clean fail", zap.Error(err))
		return
	}

	logger.Info("fetched tasks. Start to clean", zap.Int("task_count", len(tasks)))
	err = w.branchTaskDao.DeleteTasks(ctx, tasks)
	if err != nil {
		logger.Error("delete tasks fail", zap.Error(err))
	}

	logger.Info("clean worker finish")
	return
}
