<?php

namespace App\Jobs;

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;

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

    /**
     * Create a new job instance.
     *
     * @return void
     */
    protected $roomId;
    protected $userId;
    protected $userCreate;

    public function __construct($roomId, $userId, $userCreate)
    {
        //
        $this->roomId = $roomId;
        $this->userId = $userId;
        $this->userCreate = $userCreate;
    }

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

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

        if (!$roomConversation) {
            $membersArr = [
                $room->hostel->owner_id,
                $userId,
                $userCreateId
            ];
            $membersArr = array_unique($membersArr);
            sort($membersArr);
            $roomConversation = Conversation::create([
                'name' => $room->name,
                'image' => '/frontend3/assets/img/placeholder.png',
                'members' => json_encode($membersArr),
                'room_id' => $room->id,
                'is_find' => false
            ]);
            $roomConversation->users()->sync($membersArr);
        } else {
            $membersArr = $roomConversation->users()->pluck('user_id')->toArray();
            $membersArr[] = $userId;
            $membersArr = array_unique($membersArr);
            sort($membersArr);
            $roomConversation->users()->sync($membersArr);
            $roomConversation->members = json_encode($membersArr);
            $roomConversation->save();
        }

        //Add hostel

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

        if (!$hostelConversation) {
            $membersArr = [
                $room->hostel->owner_id,
                $userId,
                $userCreateId
            ];
            $membersArr = array_unique($membersArr);
            sort($membersArr);
            $hostelConversation = Conversation::create([
                'name' => $room->hostel->name,
                'image' => '/frontend3/assets/img/placeholder.png',
                'members' => json_encode($membersArr),
                'hostel_id' => $room->hostel->id,
                'is_find' => false
            ]);
            $hostelConversation->users()->sync($membersArr);
        } else {
            $membersArr = $hostelConversation->users()->pluck('user_id')->toArray();
            $membersArr[] = $userId;
            $membersArr = array_unique($membersArr);
            sort($membersArr);
            $hostelConversation->users()->sync($membersArr);
            $hostelConversation->members = json_encode($membersArr);
            $hostelConversation->save();
        }
    }
}
