<?php

namespace App\Jobs\Command;

use App\Models\CompanyCart;
use App\Models\WorkerRequestApplication; 

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

use Carbon\Carbon;

class ProcessRemoveUnsubmittedCarts implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    public $tries = 5;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $pendingCarts = CompanyCart::where('created_at', '<=', Carbon::now()->subDays(1)->toDateTimeString())
            ->limit(100)
            ->get();

        if(!$pendingCarts->isEmpty())
        {
            foreach ($pendingCarts as $item) 
            {
                //! IF CART ITEM CAME FROM WORKER REQUEST, UPDATE THEIR STATUS
                WorkerRequestApplication::query()
                    ->with('workerRequest')
                    ->select('id')
                    ->where(
                        [
                            ['worker_id',  '=', $item->worker_id],
                            ['status',     '=', 'in-cart']
                        ]
                    )
                    ->whereHas(
                        'workerRequest',
                        function ($q) use ($item) 
                        {
                            $q->where('worker_requests.company_id', '=', $item->company_id);
                        }
                    )
                    ->update(
                        [
                            'status' => 'pending',
                        ]
                    );

                    CompanyCart::where('id', $item->id)->delete();
            }
        }
        
    }
}
