<?php

namespace NewsletterBridge\Services\Query;

/**
 * Responsabilità: Gestione esclusione post tra feed
 * Single Responsibility: Solo logica di esclusione post
 */
class PostExclusionManager {
    
    private static array $used_posts = [];
    private const TRANSIENT_KEY = 'newsletter_used_posts';
    private const TRANSIENT_EXPIRATION = 3600; // 1 ora
    
    /**
     * Marca un post come utilizzato
     */
    public function markPostAsUsed(int $post_id): void {
        if (!in_array($post_id, self::$used_posts)) {
            self::$used_posts[] = $post_id;
        }
    }
    
    /**
     * Ottiene la lista dei post utilizzati
     */
    public function getUsedPosts(): array {
        if (empty(self::$used_posts)) {
            self::$used_posts = get_transient($this->getSiteScopedKey()) ?: [];
        }
        return self::$used_posts;
    }
    
    /**
     * Salva la lista dei post utilizzati
     */
    public function saveUsedPosts(): void {
        set_transient($this->getSiteScopedKey(), self::$used_posts, self::TRANSIENT_EXPIRATION);
    }
    
    /**
     * Resetta la lista dei post utilizzati
     */
    public function resetUsedPosts(): void {
        self::$used_posts = [];
        delete_transient($this->getSiteScopedKey());
    }
    
    /**
     * Ottiene il numero di post utilizzati
     */
    public function getUsedPostsCount(): int {
        return count($this->getUsedPosts());
    }

    /**
     * Restituisce la chiave di transient scoped per site_id (multisite-safe)
     */
    private function getSiteScopedKey(): string {
        $blog_id = function_exists('get_current_blog_id') ? get_current_blog_id() : 0;
        return self::TRANSIENT_KEY . '_' . $blog_id;
    }
}
