<?php

declare(strict_types=1);

namespace App\Domain\PreSave;

interface PreSaveCampaignRepositoryInterface
{
    /**
     * Find campaign by ID
     */
    public function findById(int $id): ?PreSaveCampaign;

    /**
     * Find all campaigns
     *
     * @param array<string, mixed> $filters
     * @return array<PreSaveCampaign>
     */
    public function findAll(array $filters = []): array;

    /**
     * Find campaigns ready for release
     *
     * @return array<PreSaveCampaign>
     */
    public function findReadyForRelease(): array;

    /**
     * Find campaigns ready for processing
     *
     * @return array<PreSaveCampaign>
     */
    public function findReadyForProcessing(): array;

    /**
     * Save or update campaign
     */
    public function save(PreSaveCampaign $campaign): PreSaveCampaign;

    /**
     * Delete campaign
     */
    public function delete(int $id): bool;

    /**
     * Get campaign statistics
     *
     * @return array<string, int>
     */
    public function getStatistics(int $campaignId): array;
}
