<?php

namespace App\Jobs;

use App\Components\Functions;
use App\Models\Conversation;
use App\Models\Message;
use App\Models\RenterRoom;
use App\Models\Room;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Pusher\Pusher;

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

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

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

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

        $userCreateModel = User::find($userCreate);

//        if(!$room)
//        {
//            dd($roomId);
//            return;
//        }

        if (!$userCreateModel) {
            return;
        }

	    $pusher = \PusherService::getClient();


        $userCreate = User::find($userCreate);

        $conversation = Conversation::where('room_id', $roomId)->first();

        if (!$conversation) {
            return;
        }

        $conversationId = $conversation->id;

        $userIds = RenterRoom::where('room_id', $roomId)
            ->pluck('user_id')->toArray();

        $conversationHostel = Conversation::where('hostel_id', $this->hostelId)->whereNull('room_id')->first();

        if (!$conversationHostel) {
            return;
        }

	    $nameArr = [];

        foreach ($userIds as $userId) {
            $check = \DB::table('user_conversations')
                ->where('user_id', $userId)
                ->where('conversation_id', $conversationId)
                ->count();

            if ($check > 0) {

                $user = User::find($userId);
                if ($user) {
                    $nameArr[] = $user->name_text;
                }


            }

            \DB::table('user_conversations')
                ->where('user_id', $userId)
                ->where('conversation_id', $conversationHostel->id)
                ->delete();
        }

        $conversation->delete();

        $userConverIds = \DB::table('user_conversations')
            ->where('conversation_id', $conversationHostel->id)
            ->pluck('user_id')
            ->toArray();

        sort($userConverIds);

        $conversationHostel->members = implode(',', $userConverIds);
        $conversationHostel->save();

        $conversationLastMessage = $conversationHostel->last_message;
        $info = Functions::getNameImageConversation($conversationHostel->id, $conversationHostel->image, $conversationHostel->name,
            $conversationHostel->hostel_id,
            $userCreate);
        $conversationName = $info['name'];
        $conversationImage = $info['image'];

        $message = Message::create([
            'content' => ' đã xóa ' . implode(',', $nameArr) . ' khỏi cuộc hội thoại',
            'conversation_id' => $conversation->id,
            'type' => Message::TYPE_SYSTEM,
            'from' => $this->user->id
        ]);

        foreach ($userConverIds as $userConverId) {

            $messageArr = $message->toArray();
            if ($userConverId == $userCreate->id) {
                $messageArr['content'] = 'Bạn ' . $messageArr['content'];
            } else {
                $messageArr['content'] = $userCreateModel->name_text .' '. $messageArr['content'];
            }

            $messageArr['conversation_last_message'] = $messageArr['content'];
            $messageArr['conversation_name'] = $conversationName;
            $messageArr['conversation_image'] = $conversationImage;

            $pusher->trigger('chat-' . $userConverId, 'new-message', $messageArr);

        }

        \App\Models_v2\Conversation::query()
            ->where('room_id', $roomId)
            ->where('is_find', false)
            ->delete();
    }
}
