<?php
namespace Root\Core\Base;

use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Queue;

class TaskManager
{
    /**
     *
     * @param string $moduleName نام ماژول یا سرویس
     * @param string $jobClass نام کامل کلاس Job (با namespace)
     * @param array $data داده‌های مرتبط با تسک (payload)
     * @param string $databaseConnection نام دیتابیس برای اتصال (اختیاری)
     * @param string $queue نام صف (default: 'default')
     * @param int|null $delayTimestamp زمان اجرای تسک به صورت timestamp (اختیاری)
     *
     * @return void
     */

    public function DispatchToQueue(
        array $data,
        string $databaseConnection, 
        string $jobClass, 
        ?int $delayTimestamp = null,
        string $queue = 'default'
    ): void
    {
        if (!class_exists($jobClass)) {
            throw new \InvalidArgumentException("Job class {$jobClass} does not exist.");
        }

        $job = new $jobClass($data, $databaseConnection);

        $job = $job->onQueue($queue);

        if ($delayTimestamp !== null && $delayTimestamp > time()) {
            $delaySeconds = $delayTimestamp - time();
            $job = $job->delay($delaySeconds);
        }

        Queue::push($job);
    }
}
