package jobqueue

import (
	"fmt"
	"npm/internal/logger"
)

// Worker responsible for queue serving.
type Worker struct {
	Queue *Queue
}

func newWorker(queue *Queue) *Worker {
	return &Worker{
		Queue: queue,
	}
}

// doWork processes jobs from the queue (jobs channel).
func (w *Worker) doWork() bool {
	for {
		select {
		// if context was canceled.
		case <-w.Queue.ctx.Done():
			logger.Info("JobQueue worker graceful shutdown")
			return true
		// if job received.
		case job := <-w.Queue.jobs:
			err := job.Run()
			if err != nil {
				logger.Error(fmt.Sprintf("%sError", job.Name), err)
				continue
			}
		}
	}
}