<?php

declare(strict_types=1);

namespace App\Framework\WebPush\ValueObjects;

/**
 * Push Notification.
 *
 * Kombiniert eine Push Message mit einer Subscription für den Versand.
 */
final readonly class PushNotification
{
    public function __construct(
        public PushMessage $message,
        public PushSubscription $subscription
    ) {
    }

    /**
     * Erstellt Notification für User.
     */
    public static function forUser(PushMessage $message, PushSubscription $subscription): self
    {
        return new self($message, $subscription);
    }

    /**
     * Gibt die Subscription zurück.
     */
    public function getSubscription(): PushSubscription
    {
        return $this->subscription;
    }

    /**
     * Gibt die Message zurück.
     */
    public function getMessage(): PushMessage
    {
        return $this->message;
    }

    /**
     * Gibt den Payload als JSON zurück.
     */
    public function getPayload(): string
    {
        return $this->message->toJson();
    }
}
