<?php

namespace App\Packages\v4\User\Service;

use App\Packages\User\Models\UserNotificationPush;
use App\Packages\v4\User\Notifications\TypesNotification;
use App\Packages\v4\User\Repository\UserNotificationPushRepository;
use App\Packages\v4\User\Transformer\NotificationTransformer;
use LaravelFCM\Facades\FCM;
use LaravelFCM\Message\OptionsBuilder;
use LaravelFCM\Message\PayloadDataBuilder;
use LaravelFCM\Message\PayloadNotificationBuilder;
use LaravelFCM\Response\DownstreamResponse;

/**
 * Class PushNotificationService
 *
 * @package App\Packages\User\Service
 */
class PushNotificationService
{
    /**
     * @param UserNotificationPush $userNotificationPush
     */
    public function sendPushNotification(UserNotificationPush $userNotificationPush)
    {
        $text = TypesNotification::$messages[$userNotificationPush->type];
        $token = $userNotificationPush->owner->ios_push_token;
        $builderData = NotificationTransformer::smallObjectPush($userNotificationPush);

        $optionBuilder = new OptionsBuilder();
        $optionBuilder->setTimeToLive(60*20);

        $notificationBuilder = new PayloadNotificationBuilder('TimeCaps');
        $notificationBuilder
            ->setBody($text)
            ->setSound('default');

        /** Set badge number for app icon */
        $userNewNotificationsCount = UserNotificationPushRepository::init()->newNotificationsExists($userNotificationPush->owner);
        $notificationBuilder->setBadge($userNewNotificationsCount);

        $dataBuilder = new PayloadDataBuilder();
        $dataBuilder->addData($builderData);

        $option = $optionBuilder->build();
        $notification = $notificationBuilder->build();
        $data = $dataBuilder->build();

        /** @var DownstreamResponse $downstreamResponse */
        $downstreamResponse = FCM::sendTo(
            $token,
            $option,
            $notification,
            $data
        );

        if ($downstreamResponse->numberSuccess()) {
            $userNotificationPush->setSent();
        }

    }

}