<?php

namespace App\Packages\Friend\Repository;

use App\Packages\Core\Repository\AbstractRepository;
use App\Packages\Friend\Models\FriendRelation;
use App\Packages\User\Models\User;
use DB;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Query\JoinClause;
use Illuminate\Support\Collection;

/**
 * Class FriendRepository
 * @package App\Packages\Friend\Repository
 *
 * @method FriendRelation firstById($id)
 *
 * @property FriendRelation $model
 */
class FriendRepository extends AbstractRepository
{
    const PAGE_LIMIT = 100;

    public static function init()
    {
        return new FriendRepository(FriendRelation::class);
    }

    /**
     * @param User $user
     * @param User $friend
     * @return bool
     */
    public function existsFriend(User $user, User $friend)
    {
        return $this->query()
            ->where('user_id', '=', $user->id)
            ->where('friend_id', '=', $friend->id)
            ->exists();
    }

    /**
     * @param User $user
     * @param User $friend
     *
     * @return null|FriendRelation|object
     */
    public function getFriendRelation(User $user, User $friend)
    {
        return $this->query()
            ->where('user_id', '=', $user->id)
            ->where('friend_id', '=', $friend->id)
            ->first();
    }

	/**
	 * @param User $user
	 *
	 * @return int
	 */
	public function getFriendCount(User $user)
	{
		return $this->query()
			->where('user_id', '=', $user->id)
			->count();
	}

    /**
     * @param User $ownerUser
     * @param int $page
     *
     * @return LengthAwarePaginator
     */
    public function getFriends(User $ownerUser,  $page = 1)
    {
        $query = DB::table('table_user')
            ->select([
                'table_user.uuid',
                'table_user.nickname',
                'table_user.phone_code',
                'table_user.phone_number',
                'table_user.phone_hash',
                'table_user.is_registered',
                'table_user_avatar.aws_key as awsKey',
            ])

            ->leftJoin('table_friend_relation', 'table_friend_relation.friend_id', '=', 'table_user.id')
            ->leftJoin('table_user_avatar', 'table_user_avatar.id', '=', 'table_user.avatar_id')

            ->where('table_friend_relation.user_id', '=', $ownerUser->id)
            ->whereNull('table_user.deleted_at');

        $query = $query->paginate(static::PAGE_LIMIT, ['*'], 'page', $page);

        return $query;


    }
}
