<?php

if (!defined('ABSPATH')) {
    exit;
}

/**
 * Eseguito durante l'attivazione, disattivazione e disinstallazione del plugin.
 * Questa classe definisce tutto il codice necessario da eseguire durante il ciclo di vita del plugin.
 *
 * @since      1.6.5
 */
class NewCodeByte_Chatbot_Install {

    /**
     * Registra gli hook relativi al ciclo di vita del plugin.
     *
     * @since    1.6.5
     */
    public function add_hooks() {
        register_activation_hook(NCB_CHATBOT_PLUGIN_FILE, [$this, 'activate']);
        register_uninstall_hook(NCB_CHATBOT_PLUGIN_FILE, ['NewCodeByte_Chatbot_Install', 'uninstall']);
        add_action('admin_init', [$this, 'check_update']);
    }

    /**
     * Il codice che viene eseguito all'attivazione del plugin.
     *
     * @since    1.6.5
     */
    public function activate() {
        $this->install_or_update();
    }

    /**
     * Il codice che viene eseguito su admin_init per controllare gli aggiornamenti.
     *
     * @since    1.6.5
     */
    public function check_update() {
        $this->install_or_update();
    }

    /**
     * Logica principale di installazione e aggiornamento, con migrazione dei dati per le opzioni.
     *
     * @since    1.6.5
     */
    private function install_or_update() {
        // Ottiene l'ultima versione del DB che abbiamo salvato
        $current_db_version = get_option('newcodebyte_chatbot_db_version', '1.0');
        // Definisce la versione del DB di destinazione per questo aggiornamento
        $target_db_version = '1.1'; // Versione in cui sono state introdotte la tabella 'conversations' e i nuovi percorsi degli asset

        // Esegue la logica di aggiornamento solo se la versione del DB è obsoleta
        if (version_compare($current_db_version, $target_db_version, '<')) {
            
            global $wpdb;
            require_once ABSPATH . 'wp-admin/includes/upgrade.php';

            $messages_table = $wpdb->prefix . 'newcodebyte_chatbot_messages';
            $conversations_table = $wpdb->prefix . 'newcodebyte_chatbot_conversations';
            $charset_collate = $wpdb->get_charset_collate();

            // --- Passaggio 1: Crea/Aggiorna le Tabelle del Database ---
            $sql_messages = "CREATE TABLE {$messages_table} (
                id mediumint(9) NOT NULL AUTO_INCREMENT,
                conversation_id bigint(20) NOT NULL,
                user_name tinytext,
                user_email varchar(100),
                ip varchar(100) NOT NULL DEFAULT '',
                date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
                sender varchar(50) NOT NULL DEFAULT '',
                message text NOT NULL,
                is_read tinyint(1) NOT NULL DEFAULT 0,
                PRIMARY KEY  (id),
                KEY conv_id_idx (conversation_id),
                KEY is_read_idx (is_read)
            ) $charset_collate;";
            dbDelta($sql_messages);

            if ($wpdb->get_var("SHOW TABLES LIKE '{$conversations_table}'") != $conversations_table) {
                $sql_conversations = "CREATE TABLE {$conversations_table} (
                    id bigint(20) NOT NULL AUTO_INCREMENT,
                    start_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
                    PRIMARY KEY  (id)
                ) $charset_collate;";
                $wpdb->query($sql_conversations);
            }

            // --- Passaggio 2: Esegui la Migrazione delle Vecchie Opzioni dei Percorsi Immagine ---
            $options_to_migrate = [
                'newcodebyte_chatbot_user_avatar_url',
                'newcodebyte_chatbot_bot_avatar_url',
                'newcodebyte_chatbot_icon_open_url',
                'newcodebyte_chatbot_icon_closed_url'
            ];

            foreach ($options_to_migrate as $option_name) {
                $old_url = get_option($option_name);
                // Controlla se l'opzione esiste, contiene il vecchio percorso e NON contiene quello nuovo
                if ($old_url && strpos($old_url, '/images/') !== false && strpos($old_url, '/assets/') === false) {
                    // È un vecchio URL di default, lo aggiorniamo alla nuova struttura
                    $new_url = str_replace('/images/', '/assets/images/', $old_url);
                    update_option($option_name, $new_url);
                }
            }

            // --- Passaggio 3: Aggiorna la versione del DB per non eseguire di nuovo questo codice ---
            update_option('newcodebyte_chatbot_db_version', $target_db_version);
        }
    }

    /**
     * Il codice che viene eseguito alla disinstallazione del plugin.
     *
     * @since    1.6.5
     */
    public static function uninstall() {
        $options_to_delete = [
            'newcodebyte_chatbot_title', 'newcodebyte_chatbot_welcome_message', 'newcodebyte_chatbot_api_key',
            'newcodebyte_chatbot_model', 'newcodebyte_chatbot_responses_info', 'newcodebyte_chatbot_behavior_type',
            'newcodebyte_chatbot_header_bg_color', 'newcodebyte_chatbot_header_text_color', 'newcodebyte_chatbot_chatbox_bg_color',
            'newcodebyte_chatbot_user_message_bg_color', 'newcodebyte_chatbot_user_message_text_color', 'newcodebyte_chatbot_bot_message_bg_color',
            'newcodebyte_chatbot_bot_message_text_color', 'newcodebyte_chatbot_send_button_bg_color', 'newcodebyte_chatbot_send_button_text_color',
            'newcodebyte_chatbot_user_avatar_url', 'newcodebyte_chatbot_bot_avatar_url', 'newcodebyte_chatbot_icon_open_url',
            'newcodebyte_chatbot_icon_closed_url', 'newcodebyte_chatbot_notification_sound_url', 'newcodebyte_chatbot_save_messages',
            'newcodebyte_chatbot_show_powered_by', 'newcodebyte_chatbot_window_height', 'newcodebyte_chatbot_db_version',
            'newcodebyte_chatbot_enable_prechat_form', 'newcodebyte_chatbot_prechat_title', 'newcodebyte_chatbot_prechat_description',
            'newcodebyte_chatbot_enable_proactive_message', 'newcodebyte_chatbot_proactive_message_text', 'newcodebyte_chatbot_proactive_message_delay',
            'newcodebyte_chatbot_db_installed', 'newcodebyte_chatbot_display_mode', 'newcodebyte_chatbot_position'
        ];

        foreach ($options_to_delete as $option_name) {
            delete_option($option_name);
        }

        delete_transient('newcodebyte_chatbot_unread_count');
        delete_transient('newcodebyte_openrouter_models');

        global $wpdb;
        $messages_table = $wpdb->prefix . 'newcodebyte_chatbot_messages';
        $conversations_table = $wpdb->prefix . 'newcodebyte_chatbot_conversations';
        $wpdb->query("DROP TABLE IF EXISTS $messages_table");
        $wpdb->query("DROP TABLE IF EXISTS $conversations_table");
    }
}