<?php

namespace App\Packages\Follower\Manager;

use App\Packages\Follower\Models\FollowerRelation;
use App\Packages\Follower\Repository\FollowerRepository;
use App\Packages\User\Notifications\NotificationNewFollower;
use App\Packages\User\Notifications\TypesNotification;

/**
 * Class FollowerManager
 * @package App\Packages\Follower\Manager
 */
class FollowerManager
{
    public $message;

    public function privateFollowUser($loggedUser, $user)
    {
        $follower = FollowerRepository::init()->getFollowerRow($user, $loggedUser);

        if ( $follower ) {
            if ($follower->status) $this->message = 'User already follow user';
            else $this->message = 'User already sent invite';

            return false;
        }

        $follower = new FollowerRelation();
        $follower->user_id = $user->id;
        $follower->follower_id = $loggedUser->id;
        $follower->status = false;
        $follower->save();

        /** Send notification */
        NotificationNewFollower::dispatch($loggedUser, $user)
            ->onQueue(TypesNotification::QUEUE_NOTIFICATIONS);

        $this->message = 'ok';
        return true;
    }

    public function followUser($loggedUser, $user)
    {
        $check = FollowerRepository::init()->isFollower($user, $loggedUser);

        if ( $check ) {
            $this->message = 'User already follow this user';
            return false;
        }

        $follower = new FollowerRelation();
        $follower->user_id = $user->id;
        $follower->follower_id = $loggedUser->id;
        $follower->status = true;
        $follower->save();

        $this->message = 'ok';
        return true;
    }

    public function unFollowUser($loggedUser, $user)
    {
        $follower = FollowerRepository::init()->getActiveFollowerRow($user, $loggedUser);

        if ($follower) $follower->delete();

        $this->message = 'ok';
        return true;
    }

}
