<?php


namespace App\Classes\Modules\Transactions\ControllersLogic;

use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Jobs\ListTransactionsJob;
use App\Classes\Modules\Jobs\Services\CreatesJobResult;
use App\Classes\Modules\Jobs\DataTransferObjects\JobSubmissionObject;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class ListTransactionsJobLogic extends AbstractControllerLogic
{
  /**
     * @return array
     */
    protected function notification():array {
        return [
            'title' => 'List Transaction Job',
            'message' => 'You have successfully submit a job to list transactions'
        ];
    }

    /** @var CreatesJobResult */
    private $createsJobResult;

    /**
     * ListTransactionsJobLogic constructor.
     * @param CreatesJobResult $createsJobResult
     */
    public function __construct(CreatesJobResult $createsJobResult)
    {
        $this->createsJobResult = $createsJobResult;
    }


    /**
     * @param Request $request
     * @return JsonResponse
     */
    public function logic(Request $request) : JsonResponse
    {
        $jobId = uniqid();

        $user = Auth::user();
        $userInfo = (object) [
            'type' => $user->type,
        ];

        $userInfoJson = json_encode($userInfo);
        $requestSignature = md5($userInfoJson . $request->fullUrl());

        $jobSubmissionObject = new JobSubmissionObject(
            $request->fullUrl(),
            $request->all(),
            $requestSignature,
            null,
            $jobId,
            $userInfo
        );

        ListTransactionsJob::dispatch($jobSubmissionObject)->onQueue(env('SQS_QUEUENAME_PREFIX', '').'high_priority');

        $result = [];
        $result['job_id'] = $jobId;

        $this->createsJobResult->execute($jobSubmissionObject);

        return $this->response(['data' => $result]);
    }

}
