package basejob

import (
	"context"
	"sync"

	"github.com/qit-team/work"
)

var (
	jb       *work.Job
	register func(job *work.Job)
	mu       sync.RWMutex
)

func SetJob(job *work.Job) {
	if jb == nil {
		jb = job
	}
}

func SetJobRegister(r func(*work.Job)) {
	register = r
}

func GetJob() *work.Job {
	if jb == nil {
		if register != nil {
			mu.Lock()
			defer mu.Unlock()
			jb = work.New()
			register(jb)
		} else {
			panic("job register is nil")
		}
	}
	return jb
}

/**
 * 消息入队 -- 原始message
 */
func Enqueue(ctx context.Context, topic string, message string, args ...interface{}) (isOk bool, err error) {
	return GetJob().Enqueue(ctx, topic, message, args...)
}

/**
 * 消息入队 -- Task数据结构
 */
func EnqueueWithTask(ctx context.Context, topic string, task work.Task, args ...interface{}) (isOk bool, err error) {
	return GetJob().EnqueueWithTask(ctx, topic, task, args...)
}

/**
 * 消息批量入队 -- 原始message
 */
func BatchEnqueue(ctx context.Context, topic string, messages []string, args ...interface{}) (isOk bool, err error) {
	return GetJob().BatchEnqueue(ctx, topic, messages, args...)
}

/**
 * 消息批量入队 -- Task数据结构
 */
func BatchEnqueueWithTask(ctx context.Context, topic string, tasks []work.Task, args ...interface{}) (isOk bool, err error) {
	return GetJob().BatchEnqueueWithTask(ctx, topic, tasks, args...)
}