<?php

namespace adrienpayet\notifications;

use Kirby\Cms\Page;
use Kirby\Cms\User;

/**
 * Interface pour les providers de notifications.
 *
 * Chaque type de notification (comment, project-request, etc.)
 * a son propre provider qui sait :
 * - Collecter les notifications depuis la source de données
 * - Marquer une notification comme lue sur la source
 */
interface NotificationProvider
{
    /**
     * Retourne le type de notification géré par ce provider.
     * Ex: 'comment', 'comment-reply', 'project-request'
     */
    public function getType(): string;

    /**
     * Collecte toutes les notifications de ce type pour un projet et un utilisateur.
     *
     * @param Page $project Le projet à scanner
     * @param User $user L'utilisateur courant (pour filtrer ses propres actions)
     * @return array Liste des notifications au format standard
     */
    public function collect(Page $project, User $user): array;

    /**
     * Marque une notification comme lue.
     *
     * @param string $id L'identifiant de la notification
     * @param array $location Informations de localisation (ex: _file, _projectUri)
     * @param User $user L'utilisateur qui marque comme lu
     * @return bool True si succès, false sinon
     */
    public function markAsRead(string $id, array $location, User $user): bool;
}
