<?php

namespace App\Console\Commands;

use App\Jobs\AddUserConversationV2;
use App\Jobs\CreateHostelConservationV2;
use App\Jobs\CreateRoomConservationV2;
use App\Models\Hostel;
use App\Models\RenterRoom;
use App\Models\Room;
use App\User;
use Illuminate\Console\Command;

class SyncConversationV2 extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'sync:conv';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
        $rooms = Room::query()
            ->with([
                'hostel',
                'hostel.owner'
            ])
            ->has('hostel')
            ->has('hostel.owner')
            ->get();

        foreach ($rooms as $room) {
            dispatch_now(new CreateRoomConservationV2($room->id, $room->hostel->owner->id));
            $this->line('Done room '.$room->id);
        }

        $hostels = Hostel::query()
            ->has('owner')
            ->with([
                'owner'
            ])
            ->get();
        foreach ($hostels as $hostel) {
            dispatch_now(new CreateHostelConservationV2($hostel->id, $hostel->owner->id));
            $this->line('Done hostel '.$hostel->id);
            $staffHostels = $hostel->staffHostels;
            if (!empty($staffHostels->count())) {
                foreach ($staffHostels as $staffHostel) {
                    dispatch_now(new AddUserConversationV2($staffHostel->id, $hostel->id, null));
                    $this->line('Done staff hostel '.$hostel->id);
                    $roomHostels = $hostel->rooms;
                    foreach ($roomHostels as $roomHostel) {
                        dispatch_now(new AddUserConversationV2($staffHostel->id, null, $roomHostel->id));
                        $this->line('Done staff room '.$roomHostel->id);
                    }
                }
            }
        }

        $renterRooms = RenterRoom::query()
            ->with([
                'hostel',
                'room'
            ])
            ->has('hostel')
            ->has('room')
            ->get();
        foreach ($renterRooms as $renterRoom) {
            $userId = $renterRoom->user_id;
            $hostelId = $renterRoom->hostel_id;
            $roomId = $renterRoom->room_id;
            dispatch_now(new AddUserConversationV2($userId, $hostelId, $roomId));
            $this->line('Done renter room '.$renterRoom->id);
        }
    }
}
