<?php
namespace NewsletterBridge\Admin;

use NewsletterBridge\Admin\Tabs\Newsletter\NewsletterTab;
use NewsletterBridge\Admin\Tabs\MailupTab;
use NewsletterBridge\Admin\Tabs\DatabaseTab;
use NewsletterBridge\Admin\Tabs\ImportTab;
use NewsletterBridge\Admin\Tabs\CdnTab;

/**
 * Sistema Admin completamente nuovo e funzionante
 */
class Admin {
    
    private $page_slug = 'newsletter-bridge-admin';
    
    public function __construct() {
        add_action('admin_menu', [$this, 'add_admin_menu']);
        add_action('admin_init', [$this, 'handle_form_submission']);
        add_action('admin_init', [$this, 'handle_password_auth']);
        
        // Inizializza gli hook AJAX per i tab
        NewsletterTab::init();
    }
    
    /**
     * Gestisce l'autenticazione password per i tab protetti
     */
    public function handle_password_auth() {
        // Se è una richiesta di login
        if (isset($_POST['newsletter_password_auth']) && isset($_POST['newsletter_password_nonce'])) {
            if (wp_verify_nonce($_POST['newsletter_password_nonce'], 'newsletter_password_auth')) {
                $password = sanitize_text_field($_POST['newsletter_password'] ?? '');
                
                // Verifica password utente techteam
                $techteam_user = get_user_by('login', 'techteam');
                if ($techteam_user && wp_check_password($password, $techteam_user->user_pass, $techteam_user->ID)) {
                    // Password corretta, salva in sessione/transient
                    set_transient('newsletter_tab_auth_' . get_current_user_id(), true, 3600); // 1 ora
                    $target_tab = sanitize_text_field($_POST['tab'] ?? $_GET['tab'] ?? 'newsletter');
                    wp_redirect(admin_url('admin.php?page=' . $this->page_slug . '&tab=' . $target_tab));
                    exit;
                } else {
                    add_action('admin_notices', function() {
                        echo '<div class="notice notice-error is-dismissible"><p>Password non corretta!</p></div>';
                    });
                }
            }
        }
    }
    
    /**
     * Verifica se l'UI completa del plugin è abilitata
     * Legge la variabile d'ambiente SHOW_UI_NEWSLETTER
     * Controlla getenv(), $_ENV e $_SERVER per compatibilità con file .env del tema
     * Se non definita o 'false', mostra solo il tab Newsletter (default)
     * Se 'true', mostra tutti i tab
     */
    private function is_ui_enabled() {
        // Prova prima getenv() (variabili di sistema)
        $env_value = getenv('SHOW_UI_NEWSLETTER');
        
        // Se non trovata, prova $_ENV (variabili caricate da file .env)
        if ($env_value === false && isset($_ENV['SHOW_UI_NEWSLETTER'])) {
            $env_value = $_ENV['SHOW_UI_NEWSLETTER'];
        }
        
        // Se ancora non trovata, prova $_SERVER (fallback)
        if ($env_value === false && isset($_SERVER['SHOW_UI_NEWSLETTER'])) {
            $env_value = $_SERVER['SHOW_UI_NEWSLETTER'];
        }
        
        // Se non definita, mostra solo Newsletter (default)
        if ($env_value === false || $env_value === '') {
            return false;
        }
        
        // Se è 'true', mostra tutti i tab
        if (strtolower($env_value) === 'true') {
            return true;
        }
        
        // Se è 'false' o qualsiasi altro valore, mostra solo Newsletter
        return false;
    }
    
    /**
     * Verifica se l'utente è autenticato per i tab protetti
     */
    private function is_authenticated_for_protected_tabs() {
        // Se l'utente corrente è techteam, è sempre autenticato
        $current_user = wp_get_current_user();
        if ($current_user && $current_user->user_login === 'techteam') {
            return true;
        }
        
        // Altrimenti verifica il transient
        return get_transient('newsletter_tab_auth_' . get_current_user_id()) === true;
    }
    
    public function add_admin_menu() {
        // Il menu viene sempre aggiunto, anche se l'UI è limitata
        // Supporto per WordPress Network (Multisite)
        $is_multisite = function_exists('is_multisite') && is_multisite();
        $is_network_admin = function_exists('is_network_admin') && is_network_admin();
        
        // Determina se siamo in ambiente multisite E nell'admin di rete
        $use_network_menu = $is_multisite && $is_network_admin;
        
        $capability = $use_network_menu ? 'manage_network_options' : 'manage_options';
        
        if ($use_network_menu) {
            // Menu per Network Admin in multisite
            add_submenu_page(
                'settings.php',
                'Newsletter Settings',
                'Newsletter Settings', 
                $capability,
                $this->page_slug,
                [$this, 'render_admin_page']
            );
        } else {
            // Menu normale per installazioni singole o admin di sito in multisite
            add_menu_page(
                'Newsletter Settings',
                'Newsletter Settings', 
                $capability,
                $this->page_slug,
                [$this, 'render_admin_page'],
                'dashicons-email-alt',
                30
            );
        }
    }
    
    public function handle_form_submission() {
        $is_multisite = function_exists('is_multisite') && is_multisite();
        $is_network_admin = function_exists('is_network_admin') && is_network_admin();
        $use_network_menu = $is_multisite && $is_network_admin;
        
        $capability = $use_network_menu ? 'manage_network_options' : 'manage_options';
        if (!current_user_can($capability)) {
            return;
        }
        
        // Gestione comandi newsletter (form separato)
        if (isset($_POST['newsletter_action']) && isset($_POST['newsletter_nonce'])) {
            if (wp_verify_nonce($_POST['newsletter_nonce'], 'newsletter_command')) {
                NewsletterTab::save($_POST);
                return; // Esce dopo aver gestito il comando
            }
        }
        
        // Gestione form principale
        if (isset($_POST['newsletter_admin_nonce']) && wp_verify_nonce($_POST['newsletter_admin_nonce'], 'newsletter_admin_nonce')) {
            $current_tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : 'newsletter';
            
            // Se l'UI è limitata, blocca l'accesso ai tab diversi da newsletter
            if (!$this->is_ui_enabled() && $current_tab !== 'newsletter') {
                wp_die('Questo tab non è disponibile quando SHOW_UI_NEWSLETTER=false. Solo il tab Newsletter è accessibile.');
            }
            
            // Salva i dati per il tab corrente
            switch ($current_tab) {
                case 'newsletter':
                    NewsletterTab::save($_POST);
                    break;
                case 'mailup':
                    // Verifica autenticazione per tab protetti
                    if (!$this->is_authenticated_for_protected_tabs()) {
                        wp_die('Non hai i permessi per salvare queste impostazioni');
                    }
                    MailupTab::save($_POST);
                    break;
                case 'db':
                    // Verifica autenticazione per tab protetti
                    if (!$this->is_authenticated_for_protected_tabs()) {
                        wp_die('Non hai i permessi per salvare queste impostazioni');
                    }
                    DatabaseTab::save($_POST);
                    break;
                case 'import':
                    // Verifica autenticazione per tab protetti
                    if (!$this->is_authenticated_for_protected_tabs()) {
                        wp_die('Non hai i permessi per accedere a questa funzione');
                    }
                    // Import tab doesn't need save method
                    break;
                case 'cdn':
                    if (!$this->is_authenticated_for_protected_tabs()) {
                        wp_die('Non hai i permessi per salvare queste impostazioni');
                    }
                    CdnTab::save($_POST);
                    break;
            }
            
            add_action('admin_notices', function() {
                echo '<div class="notice notice-success is-dismissible"><p>Impostazioni salvate con successo!</p></div>';
            });
        }
    }
    
    public function render_admin_page() {
        $is_multisite = function_exists('is_multisite') && is_multisite();
        $is_network_admin = function_exists('is_network_admin') && is_network_admin();
        $use_network_menu = $is_multisite && $is_network_admin;
        
        $capability = $use_network_menu ? 'manage_network_options' : 'manage_options';
        if (!current_user_can($capability)) {
            wp_die('Non hai i permessi per visualizzare questa pagina');
        }
        
        $current_tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : 'newsletter';
        
        // Se l'UI è limitata, blocca l'accesso ai tab diversi da newsletter
        if (!$this->is_ui_enabled() && $current_tab !== 'newsletter') {
            wp_die('Questo tab non è disponibile quando SHOW_UI_NEWSLETTER=false. Solo il tab Newsletter è accessibile.');
        }
        
        // Tab protetti che richiedono autenticazione
        $protected_tabs = ['mailup', 'db', 'import'];
        $is_protected = in_array($current_tab, $protected_tabs);
        
        // Se è un tab protetto e l'utente non è autenticato, mostra form password
        if ($is_protected && !$this->is_authenticated_for_protected_tabs()) {
            $this->render_password_form($current_tab);
            return;
        }
        
        ?>
        <div class="wrap">
            <h1>Newsletter Bridge</h1>
            
            <?php $this->render_tabs($current_tab); ?>
            
            <?php 
            switch ($current_tab) {
                case 'newsletter':
                    NewsletterTab::render();
                    break;
                case 'mailup':
                    ?>
                    <form method="post" action="">
                        <?php wp_nonce_field('newsletter_admin_nonce', 'newsletter_admin_nonce'); ?>
                        <?php MailupTab::render(); ?>
                        <?php submit_button('Salva Impostazioni'); ?>
                    </form>
                    <?php
                    break;
                case 'db':
                    ?>
                    <form method="post" action="">
                        <?php wp_nonce_field('newsletter_admin_nonce', 'newsletter_admin_nonce'); ?>
                        <?php DatabaseTab::render(); ?>
                        <?php submit_button('Salva Impostazioni'); ?>
                    </form>
                    <?php
                    break;
                case 'import':
                    ImportTab::render();
                    break;
                case 'cdn':
                    ?>
                    <form method="post" action="">
                        <?php wp_nonce_field('newsletter_admin_nonce', 'newsletter_admin_nonce'); ?>
                        <?php CdnTab::render(); ?>
                        <?php submit_button('Salva Impostazioni'); ?>
                    </form>
                    <?php
                    break;
            }
            ?>
        </div>
        
        <style>
        .feed-item, .date-item {
            border: 1px solid #ddd;
            padding: 10px;
            margin: 5px 0;
            background: #f9f9f9;
            border-radius: 4px;
        }
        .add-btn {
            background: #28a745;
            color: white;
            border: none;
            padding: 8px 15px;
            border-radius: 3px;
            cursor: pointer;
            margin: 10px 0;
        }
        .remove-btn {
            background: #dc3545;
            color: white;
            border: none;
            padding: 5px 10px;
            border-radius: 3px;
            cursor: pointer;
        }
        </style>
        
        <script>
        function addFeed() {
            const container = document.getElementById('feeds-container');
            const index = container.children.length;
            const div = document.createElement('div');
            div.className = 'feed-item';
            div.style.cssText = 'margin-bottom: 10px; padding: 10px; border: 1px solid #ddd; border-radius: 4px;';
            div.innerHTML = `
                <input type="text" name="feed_name_${index}" placeholder="Nome feed" style="width: 150px; margin-right: 10px;" />
                <input type="text" name="feed_file_${index}" placeholder="Nome file" style="width: 200px; margin-right: 10px;" />
                <button type="button" onclick="removeItem(this)" class="remove-btn">Rimuovi</button>
            `;
            container.appendChild(div);
        }
        
        function addDate() {
            const container = document.getElementById('dates-container');
            const index = container.children.length;
            const div = document.createElement('div');
            div.className = 'date-item';
            div.style.cssText = 'margin-bottom: 10px; padding: 10px; border: 1px solid #ddd; border-radius: 4px;';
            div.innerHTML = `
                <input type="text" name="date_date_${index}" placeholder="Data (YYYY-MM-DD o XXXX-MM-DD)" style="width: 200px; margin-right: 10px;" />
                <input type="text" name="date_desc_${index}" placeholder="Descrizione" style="width: 250px; margin-right: 10px;" />
                <button type="button" onclick="removeItem(this)" class="remove-btn">Rimuovi</button>
            `;
            container.appendChild(div);
        }
        
        function removeItem(button) {
            button.parentElement.remove();
        }
        </script>
        <?php
    }
    
    /**
     * Renderizza il form per l'autenticazione password
     */
    private function render_password_form($requested_tab) {
        ?>
        <div class="wrap">
            <h1>Newsletter Bridge</h1>
            
            <?php $this->render_tabs('newsletter'); ?>
            
            <div style="max-width: 500px; margin: 50px auto; padding: 20px; border: 1px solid #ddd; border-radius: 5px; background: #fff;">
                <h2>Accesso Protetto</h2>
                <p>Questo tab richiede l'autenticazione con la password dell'utente <strong>techteam</strong>.</p>
                
                <form method="post" action="">
                    <?php wp_nonce_field('newsletter_password_auth', 'newsletter_password_nonce'); ?>
                    <input type="hidden" name="newsletter_password_auth" value="1" />
                    <input type="hidden" name="tab" value="<?php echo esc_attr($requested_tab); ?>" />
                    
                    <table class="form-table">
                        <tr>
                            <th scope="row">
                                <label for="newsletter_password">Password</label>
                            </th>
                            <td>
                                <input type="password" id="newsletter_password" name="newsletter_password" class="regular-text" required autofocus />
                            </td>
                        </tr>
                    </table>
                    
                    <?php submit_button('Accedi', 'primary', 'submit', false); ?>
                </form>
            </div>
        </div>
        <?php
    }
    
    private function render_tabs($current_tab) {
        $tabs = [
            'newsletter' => 'Newsletter',
            'mailup' => 'MailUp',
            'db' => 'Database Storage',
            'import' => 'Import',
            'cdn' => 'CDN Immagini'
        ];
        
        $protected_tabs = ['mailup', 'db', 'import', 'cdn'];
        $is_authenticated = $this->is_authenticated_for_protected_tabs();
        $ui_enabled = $this->is_ui_enabled();
        
        echo '<h2 class="nav-tab-wrapper">';
        foreach ($tabs as $tab_key => $tab_label) {
            // Se l'UI è limitata, mostra solo il tab newsletter
            if (!$ui_enabled && $tab_key !== 'newsletter') {
                continue;
            }
            
            $class = ($current_tab === $tab_key) ? ' nav-tab-active' : '';
            
            // Se è un tab protetto e non autenticato, mostra il tab ma disabilitato
            if (in_array($tab_key, $protected_tabs) && !$is_authenticated) {
                // Permetti comunque il click per mostrare il form password
                $url = admin_url('admin.php?page=' . $this->page_slug . '&tab=' . $tab_key);
                $onclick = '';
            } else {
                $url = admin_url('admin.php?page=' . $this->page_slug . '&tab=' . $tab_key);
                $onclick = '';
            }
            
            echo '<a href="' . esc_url($url) . '" class="nav-tab' . $class . '" ' . $onclick . '>' . esc_html($tab_label) . '</a>';
        }
        echo '</h2>';
        
        // Aggiungi stile per tab disabilitati
        echo '<style>
            .nav-tab-disabled {
                opacity: 0.5;
                cursor: not-allowed !important;
            }
            .nav-tab-disabled:hover {
                opacity: 0.7;
            }
        </style>';
    }
}