<?php

namespace App\Jobs;

use App\Models\Conversation;
use App\Models\Message;
use Carbon\Carbon;
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 SendMessageFromUser implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */

    protected $message;
    protected $fromUser;
    protected $toConversation;
    public function onConnection($connection)
    {
        $this->connection = 'redis';
        return $this;
    }


    public function __construct($message, $fromUser, $toConversation)
    {
        //
        $this->message = $message;
        $this->fromUser = $fromUser;
        $this->toConversation = $toConversation;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //
	    $pusher = \PusherService::getClient();

        $fromUser = $this->fromUser;
        $message = $this->message;
        $conversation = Conversation::find($this->toConversation);

        if (!$conversation) {
            return;
        }

        $message = Message::create([
            'content' => $message,
            'conversation_id' => $conversation->id,
            'type' => Message::TYPE_TEXT,
            'from' => $fromUser
        ]);

        $conversation->update([
            'last_message_id' => $message->id,
            'last_message_time' => Carbon::now()->toDateTimeString()
        ]);

        $messageArr = $message->toArray();
        $content = $message->content;
        $userOnlineArr = [];

        if (isset($usersChannel['result'])) {
            if (isset($usersChannel['result']['users'])) {
                foreach ($usersChannel['result']['users'] as $item) {
                    $userIdOnline = $item['id'];
                    $userOnlineArr[] = $userIdOnline;
                }
            }
        }

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

        foreach ($membersArr as $userId) {


            $q = \DB::table('user_conversations')
                ->where('conversation_id', $conversation->id)
                ->where('user_id', $userId);

            if (in_array($userId, $userOnlineArr)) {
                $q->update([
                    'is_read_last_message' => 1
                ]);
            } else {
                $q->update([
                    'is_read_last_message' => 0
                ]);
            }

            if ($message->type == Message::TYPE_IMAGE || $message->type == Message::TYPE_SYSTEM) {
                if ($userId == $fromUser) {
                    if ($message->type == Message::TYPE_IMAGE) {
                        $content = 'Bạn đã gửi một ảnh';
                    } else {
                        $content = 'Bạn ' . $content;
                    }
                } else {
                    $fromUser = $message->fromUser;
                    if ($fromUser) {
                        if ($message->type == Message::TYPE_IMAGE) {
                            $content = $fromUser->name_text . ' đã gửi một ảnh';
                        } else {
                            $content = $fromUser->name_text . ' '. $content;
                        }
                    }
                }

            }

            $messageArr['content'] = $content;
            $pusher->trigger('chat-' . $userId, 'new-message', $messageArr);
            dispatch(new SendNotificationMessage($userId, $messageArr));
        }
    }
}
