<?php

declare(strict_types=1);

namespace App\Framework\WebPush\Repository;

use App\Framework\WebPush\ValueObjects\PushSubscription;

/**
 * Push Subscription Repository Interface.
 */
interface SubscriptionRepository
{
    /**
     * Speichert eine Subscription.
     */
    public function save(PushSubscription $subscription): bool;

    /**
     * Findet Subscription by Endpoint Hash.
     */
    public function findByHash(string $hash): ?PushSubscription;

    /**
     * Findet alle Subscriptions für einen User.
     *
     * @return PushSubscription[]
     */
    public function findByUserId(string $userId): array;

    /**
     * Findet alle aktiven Subscriptions.
     *
     * @return PushSubscription[]
     */
    public function findAll(): array;

    /**
     * Löscht eine Subscription.
     */
    public function delete(string $hash): bool;

    /**
     * Löscht alle Subscriptions für einen User.
     */
    public function deleteByUserId(string $userId): int;

    /**
     * Löscht abgelaufene Subscriptions.
     */
    public function deleteExpired(): int;

    /**
     * Prüft ob Subscription existiert.
     */
    public function exists(string $hash): bool;
}
