<?php

namespace NewsletterBridge\Config;

/**
 * Classe per la configurazione del sito e gestione degli hook WordPress
 */
class SiteConfig {

    /**
     * Inizializza tutti gli hook e le configurazioni
     */
    public static function init() {
        // Hook per l'attivazione/disattivazione del plugin
        register_activation_hook(PLUGIN_PATH_BRIDGE . '/newsletter_bridge.php', [__CLASS__, 'activate']);
        register_deactivation_hook(PLUGIN_PATH_BRIDGE . '/newsletter_bridge.php', [__CLASS__, 'deactivate']);
        
        // Hook per le meta box e colonne admin
        // Hook per meta box e colonne admin rimossi
    }

    /**
     * Attivazione del plugin - Supporto per WordPress Network (Multisite)
     */
    public static function activate() {
        if (is_multisite()) {
            // In multisite, attiva per tutti i siti
            $sites = get_sites();
            foreach ($sites as $site) {
                switch_to_blog($site->blog_id);
                self::activate_single_site();
                restore_current_blog();
            }
        } else {
            self::activate_single_site();
        }
    }

    /**
     * Attivazione per un singolo sito
     */
    public static function activate_single_site() {
        // Crea le directory necessarie
        $upload_dir = wp_upload_dir();
        $nl_feed_dir = $upload_dir['basedir'] . '/nl-feed/';
        
        if (!file_exists($nl_feed_dir)) {
            wp_mkdir_p($nl_feed_dir);
        }
        
        // Imposta le opzioni di default se non esistono
        $default_options = [
            'db_domain' => str_replace(['http://','https://','staging.','www.'], '', get_home_url()),
            'db_dsn' => 'mysql:host=10.50.50.100;dbname=newsletterblazemedia;charset=utf8mb4',
            'db_user' => 'f2innovation',
            'db_pass' => 'F21nn0V@t10n',
            'db_optin' => 'false'
        ];
        
        foreach ($default_options as $option => $value) {
            // In multisite, salva sempre come site options (non network options)
            // per permettere configurazioni diverse per ogni sito
            // Solo se esplicitamente attivato dal network admin, usa network options
            $is_network = is_multisite() && is_network_admin();
            
            if ($is_network) {
                if (!get_site_option($option)) {
                    add_site_option($option, $value);
                }
            } else {
                if (!get_option($option)) {
                    add_option($option, $value);
                }
            }
        }     
        // Inizializza l'opzione ultimo_invio_newsletter se non esiste
        // In multisite, viene inizializzata per ogni sito nel loop sopra
        self::initLastNewsletterDate();
        
        // Flush dei permalink per attivare le regole di rewrite
        flush_rewrite_rules();
    }

    /**
     * Disattivazione del plugin
     */
    public static function deactivate() {
        // Flush dei permalink per rimuovere le regole di rewrite
        flush_rewrite_rules();
    }
    
    /**
     * Inizializza l'opzione ultimo_invio_newsletter se non esiste
     * In multisite, inizializza per il sito corrente
     */
    public static function initLastNewsletterDate() {
        $option_name = 'ultimo_invio_newsletter';
        
        // Non imposta automaticamente una data se non esiste
        // La data verrà impostata solo quando viene effettivamente inviata una newsletter
        // In multisite, ogni sito ha la sua opzione
        if (!get_option($option_name)) {
            // Inizializza come vuoto - nessuna newsletter inviata
            add_option($option_name, '');
        }
    }
    
    /**
     * Aggiorna la data dell'ultimo invio newsletter
     * In multisite, salva per il sito corrente (dopo switch_to_blog)
     */
    public static function updateLastNewsletterDate($date = null) {
        $option_name = 'ultimo_invio_newsletter';
        // Salva data e ora esatte
        $date = $date ?: current_time('mysql'); // Y-m-d H:i:s
        
        // In multisite, ogni sito ha la sua opzione
        // Usa sempre update_option per il sito corrente (dopo switch_to_blog)
        update_option($option_name, $date);
    }
    
    /**
     * Recupera la data dell'ultimo invio newsletter
     * In multisite, legge per il sito corrente (dopo switch_to_blog)
     */
    public static function getLastNewsletterDate() {
        $option_name = 'ultimo_invio_newsletter';
        
        // In multisite, ogni sito ha la sua opzione
        // Usa sempre get_option per il sito corrente (dopo switch_to_blog)
        $date = get_option($option_name);
        
        // Se non esiste o è vuoto, restituisci stringa vuota
        if (!$date || $date === '') {
            return '';
        }
        
        return $date;
    }
    
    /**
     * Supporto per WordPress Network (Multisite)
     * Aggiorna la data per tutti i siti della rete
     */
    public static function updateLastNewsletterDateNetwork($date = null) {
        if (is_multisite()) {
            $sites = get_sites();
            foreach ($sites as $site) {
                switch_to_blog($site->blog_id);
                self::updateLastNewsletterDate($date);
                restore_current_blog();
            }
        } else {
            self::updateLastNewsletterDate($date);
        }
    }
    
    /**
     * Supporto per WordPress Network (Multisite)
     * Recupera la data per il sito corrente
     */
    public static function getLastNewsletterDateNetwork() {
        if (is_multisite()) {
            // In multisite, ogni sito ha la sua data
            return self::getLastNewsletterDate();
        } else {
            return self::getLastNewsletterDate();
        }
    }

}
