<?php

namespace App\Jobs;

use App\Models\Hostel;
use App\Models\Room;
use App\Models_v2\Conversation;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use phpDocumentor\Reflection\DocBlock\Description;

class RemoveUserConversationV2 implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $hostelId;
    protected $roomId;
    protected $userId;


    public function __construct($userId, $hostelId, $roomId)
    {
        //
        $this->userId = $userId;
        $this->hostelId = $hostelId;
        $this->roomId = $roomId;
        $this->connection = 'redis';

    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //
        $roomId = $this->roomId;
        $userId = $this->userId;
        $hostelId = $this->hostelId;

        $room = null;
        $hostel = null;
        if (!empty($roomId)) {
            $room = Room::find($roomId);
            if (!$room) {
                return;
            }
        }

        if (!empty($hostelId)) {
            $hostel = Hostel::find($hostelId);
            if (!$hostel) {
                return;
            }
        }
        //remove room
        if ($room) {
            $roomConversation = Conversation::query()
                ->where('room_id', $this->roomId)
                ->where('is_find', false)
                ->first();

            if ($roomConversation) {
                $roomConversation->users()->detach($userId);

                $membersArr = $roomConversation->users()->pluck('user_id')->toArray();
                $membersArr = array_unique($membersArr);
                sort($membersArr);

                $roomConversation->members = json_encode($membersArr);
                $roomConversation->save();
            }

        }
        //remove hostel

        if ($hostel) {

            $hostelConversation = Conversation::query()
                ->where('hostel_id', $hostel->id)
                ->where('is_find', false)
                ->first();


            if ($hostelConversation) {
                $hostelConversation->users()->detach($userId);
                $membersArr = $hostelConversation->users()->pluck('user_id')->toArray();
                $membersArr = array_unique($membersArr);
                sort($membersArr);
                $hostelConversation->members = json_encode($membersArr);
                $hostelConversation->save();
            }
        }
    }
}
