<?php

namespace App\PackagesApi\v3\Controllers\User;

use App\Http\Controllers\Controller;
use App\Packages\Capsule\Models\Capsule;
use App\Packages\Capsule\Repository\CapsuleRepository;
use App\Packages\Capsule\Transformer\CapsuleArrayTransformer;
use App\Packages\Friend\Models\FriendInvite;
use App\Packages\Friend\Repository\FriendInviteRepository;
use App\Packages\User\Models\User;
use App\Packages\User\Models\UserNotification;
use App\Packages\User\Repository\UserNotificationRepository;
use App\Packages\User\Repository\UserRepository;
use App\Packages\User\Transformer\UserTransformer;
use App\PackagesApi\Status\StatusCode;
use Illuminate\Http\JsonResponse;

/**
 * Class AuthController
 *
 * @package App\Http\Controllers\API
 */
class UserController extends Controller
{
    /** @var User */
    private $user;

    public function __construct()
    {
        $this->user = user();
    }

    /**
     * @return JsonResponse
     */
    public function updates()
    {
        $userHasInvites = FriendInviteRepository::init()->userHasInvites($this->user);
        $userHasNewNotifications = UserNotificationRepository::init()->newNotificationsExists($this->user);

        return jsonSuccess(
            [
                'updates' => [
                    'has_new_notifications' => (int)$userHasNewNotifications,
                    'has_new_friend_invites' => (int)$userHasInvites,
                ],
            ]
        );
    }

    /**
     * @return JsonResponse
     */
    public function profile()
    {
        $this->user->saveAccess('View our profile');

        return jsonSuccess([
            'settings' => UserTransformer::objectUserProfile($this->user, $this->user),
        ]);
    }

    /**
     * @return JsonResponse
     */
    public function info()
    {
        $this->user->saveAccess('View other profile');

        $userUuid = request()->route('userUuid');
        $user = UserRepository::init()->firstByUuid($userUuid);

        if (!$user) {
            return jsonErrorEntity([
                'message' => 'User does not exists',
            ]);
        }

        return jsonSuccess([
            'settings' => UserTransformer::objectUserProfile($user, $this->user),
        ]);
    }
}
