<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------

namespace core\job;

use core\util\Queue;

/**
 * 任务派遣队列
 */
class Dispatch
{

    /**
     * 加入队列
     * @param $action
     * @param array $data
     * @param int $secs
     * @param string|null $queue_name
     * @param bool $is_async
     * @return mixed
     */
    public static function dispatch($action, array $data = [], int $secs = 0, string $queue_name = null, bool $is_async = true)
    {
        $class = static::class;//调用主调类
        if (env('queue.state', false) && $is_async) {
            $queue = Queue::instance()->job($class)->secs($secs);
            if (is_array($action)) {
                $queue->data(...$action);
            } else if (is_string($action)) {
                $queue->method($action)->data(...$data);
            }
            if ($queue_name) {
                $queue->setQueueName($queue_name);
            }
            return $queue->push();
        } else {
            if($secs == 0){
                $class_name = '\\' . $class;
                $res = new $class_name();
                if (is_array($action)) {
                    return $res->doJob(...$action);
                } else {
                    return $res->$action(...$data);
                }
            }
        }
    }
}