<?php

namespace App\Console\Commands\Update;

use App\Packages\Follower\Models\FollowerRelation;
use App\Packages\Friend\Models\FriendRelation;
use App\Packages\User\Models\User;
use Illuminate\Console\Command;

/**
 * Class FriendToFollowerCommand
 * @package App\Console\Commands\Update
 */
class FriendToFollowerCommand extends Command
{
    protected $signature = 'update:friend_to_follower';

    public function handle()
    {
        $users = User::query()
            ->where('is_registered', true)
            ->get();

        if ( $users->isEmpty() ) {
            $this->info('Users empty');
            return false;
        }

        $statusBar = $this->output->createProgressBar($users->count());
        $statusBar->start();

        foreach ($users as $user) {
            /** @var User $user */
            $friends_relations = FriendRelation::query()
                ->where('friend_id', $user->id)
                ->orWhere('user_id', $user->id)
                ->get();

            if ($friends_relations->isEmpty()) continue;

            foreach ($friends_relations as $relation) {
                /** @var FriendRelation $relation */
                $friend_id = ($relation->user_id == $user->id) ? $relation->friend_id : $relation->user_id;

                /** @var User $friend */
                $friend = User::query()->find($friend_id);

                if ( ! $friend || ! $friend->is_registered ) continue;

                $is_following = FollowerRelation::query()
                    ->where('user_id', $friend_id)
                    ->where('follower_id', $user->id)
                    ->first();

                if ( ! $is_following ) {
                    $following = new FollowerRelation();
                    $following->user_id = $friend_id;
                    $following->follower_id = $user->id;
                    $following->status = true;
                    $following->save();
                }

                $is_follower = FollowerRelation::query()
                    ->where('user_id', $user->id)
                    ->where('follower_id', $friend_id)
                    ->first();

                if ( ! $is_follower ) {
                    $follower = new FollowerRelation();
                    $follower->user_id = $user->id;
                    $follower->follower_id = $friend_id;
                    $follower->status = true;
                    $follower->save();
                }
            }

            $statusBar->advance();
        }

        $statusBar->finish();
        $this->info('Finished');

        return true;
    }
}













