<?php

declare(strict_types=1);

namespace App\Application\LiveComponents\Services;

use App\Application\LiveComponents\ValueObjects\Activity;
use App\Application\LiveComponents\ValueObjects\ActivityFilter;

/**
 * ActivityDataProvider - Interface for loading activity feed data
 */
interface ActivityDataProvider
{
    /**
     * Get activities with optional filter
     *
     * @param ActivityFilter $filter
     * @param int $limit
     * @return array<Activity>
     */
    public function getActivities(ActivityFilter $filter = ActivityFilter::ALL, int $limit = 50): array;

    /**
     * Add a new activity
     *
     * @param Activity $activity
     * @return bool
     */
    public function addActivity(Activity $activity): bool;

    /**
     * Mark activity as read
     *
     * @param string $activityId
     * @return bool
     */
    public function markAsRead(string $activityId): bool;

    /**
     * Mark all activities as read
     *
     * @return int Number of activities marked
     */
    public function markAllAsRead(): int;

    /**
     * Get unread count
     *
     * @return int
     */
    public function getUnreadCount(): int;

    /**
     * Delete activity
     *
     * @param string $activityId
     * @return bool
     */
    public function deleteActivity(string $activityId): bool;
}
