<?php
/*
Plugin Name: Click Button
Description: Estadísticas y mediciones para tus botones de acción en WordPress de una manera fácil, sencilla y efectiva.
Version: 1.5.8
Requires at least: 5.2
Requires PHP:      7.4
Author:            ArturDevs
Author URI:        https://arturdevs.net/plugins/
Plugin URI: https://arturdevs.net/plugins/
License:           gpl-2
License URI:       https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:       arturdevs-click_button
*/

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Salir si se accede directamente
}

// Definir constantes
define( 'CLICKBUTTON_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'CLICKBUTTON_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
define( 'CLICKBUTTON_VERSION', '1.4.6' );

// Incluir el autoloader de Composer
if ( file_exists( CLICKBUTTON_PLUGIN_DIR . 'vendor/autoload.php' ) ) {
    require_once CLICKBUTTON_PLUGIN_DIR . 'vendor/autoload.php';
} else {
    error_log( 'CLICKBUTTON ERROR: No se encontró vendor/autoload.php. Asegúrate de que las dependencias de Composer estén instaladas correctamente.' );
}

// Incluir archivos adicionales
require_once CLICKBUTTON_PLUGIN_DIR . 'includes/admin.php';
require_once CLICKBUTTON_PLUGIN_DIR . 'includes/export.php';

/**
 * Función para crear tablas en la base de datos
 */
function clickbutton_create_tables() {
    global $wpdb;
    $charset_collate = $wpdb->get_charset_collate();

    // Nombre de las tablas con prefijo
    $table_buttons = $wpdb->prefix . 'clickbutton_buttons';
    $table_clicks  = $wpdb->prefix . 'clickbutton_clicks';

    // SQL para la tabla de botones
    $sql_buttons = "CREATE TABLE $table_buttons (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        css_id varchar(255) NOT NULL,
        name varchar(255) NOT NULL,
        PRIMARY KEY  (id),
        UNIQUE KEY css_id (css_id)
    ) $charset_collate;";

    // SQL para la tabla de clics
    $sql_clicks = "CREATE TABLE $table_clicks (
        id bigint(20) NOT NULL AUTO_INCREMENT,
        button_id mediumint(9) NOT NULL,
        page_url varchar(2083) NOT NULL,
        user_ip varchar(100) NOT NULL,
        user_agent varchar(255) NOT NULL,
        click_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY  (id),
        KEY button_id (button_id)
    ) $charset_collate;";

    // Incluir la función dbDelta
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );

    // Depuración: Registrar que se está intentando crear las tablas
    error_log( 'CLICKBUTTON DEBUG: Intentando crear/actualizar tablas wp_clickbutton_buttons y wp_clickbutton_clicks.' );

    // Ejecutar dbDelta para crear/actualizar las tablas
    dbDelta( $sql_buttons );
    dbDelta( $sql_clicks );

    // Depuración: Confirmar la creación
    error_log( 'CLICKBUTTON DEBUG: Tablas wp_clickbutton_buttons y wp_clickbutton_clicks creadas o actualizadas.' );
}

// Registrar el hook de activación directamente
register_activation_hook( __FILE__, 'clickbutton_create_tables' );

/**
 * Función para encolar scripts en el frontend
 */
function clickbutton_enqueue_scripts() {
    global $wpdb;
    $table_buttons = $wpdb->prefix . 'clickbutton_buttons';
    $buttons = $wpdb->get_col( "SELECT css_id FROM $table_buttons" );

    if ( ! empty( $buttons ) ) {
        wp_enqueue_script( 'clickbutton-tracking', CLICKBUTTON_PLUGIN_URL . 'includes/tracking.js', array( 'jquery' ), CLICKBUTTON_VERSION, true );
        wp_localize_script( 'clickbutton-tracking', 'clickbutton_ajax', array( 
            'ajax_url' => admin_url( 'admin-ajax.php' ),
            'nonce'    => wp_create_nonce( 'clickbutton_nonce' ),
            'registered_buttons' => $buttons
        ) );
    }
}
add_action( 'wp_enqueue_scripts', 'clickbutton_enqueue_scripts' );

/**
 * Función para encolar scripts y estilos en el admin
 */
function clickbutton_admin_enqueue_scripts( $hook ) {
    // Verificar si el hook actual corresponde a las páginas del plugin
    if ( strpos( $hook, 'clickbutton' ) === false ) {
        return;
    }
    // Encolar FontAwesome desde CDN
    wp_enqueue_style('fontawesome_css', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css', array(), '6.4.0');
    wp_enqueue_style( 'clickbutton-admin-css', CLICKBUTTON_PLUGIN_URL . 'assets/css/admin.css', array(), CLICKBUTTON_VERSION );
    wp_enqueue_script( 'clickbutton-admin-js', CLICKBUTTON_PLUGIN_URL . 'assets/js/admin.js', array( 'jquery' ), CLICKBUTTON_VERSION, true );
}
add_action( 'admin_enqueue_scripts', 'clickbutton_admin_enqueue_scripts' );

/**
 * Función para rastrear clics
 */
function clickbutton_track_click() {
    // Verificar nonce para seguridad
    if ( ! isset( $_POST['css_id'] ) || ! wp_verify_nonce( $_POST['nonce'], 'clickbutton_nonce' ) ) {
        wp_send_json_error( 'Solicitud inválida' );
    }

    $css_id = sanitize_text_field( $_POST['css_id'] );
    $page_url = esc_url_raw( $_POST['page_url'] );
    $user_agent = sanitize_text_field( $_POST['user_agent'] );
    $user_ip = $_SERVER['REMOTE_ADDR'];

    global $wpdb;
    $table_buttons = $wpdb->prefix . 'clickbutton_buttons';
    $table_clicks = $wpdb->prefix . 'clickbutton_clicks';

    // Obtener el ID del botón
    $button = $wpdb->get_row( $wpdb->prepare( "SELECT id FROM $table_buttons WHERE css_id = %s", $css_id ) );

    if ( ! $button ) {
        wp_send_json_error( 'Botón no encontrado' );
    }

    // Insertar registro de clic
    $inserted = $wpdb->insert(
        $table_clicks,
        array(
            'button_id' => $button->id,
            'page_url' => $page_url,
            'user_ip' => $user_ip,
            'user_agent' => $user_agent,
        ),
        array(
            '%d',
            '%s',
            '%s',
            '%s',
        )
    );

    if ( $inserted ) {
        wp_send_json_success( 'Click registrado' );
    } else {
        wp_send_json_error( 'Error al registrar el click' );
    }
}
add_action( 'wp_ajax_clickbutton_track', 'clickbutton_track_click' );
add_action( 'wp_ajax_nopriv_clickbutton_track', 'clickbutton_track_click' );

/**
 * Inicializar el plugin
 */
function clickbutton_init() {
    // Cargar archivos de traducción
    load_plugin_textdomain( 'clickbutton', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );

    // Nota: Las acciones de encolado y AJAX ya están registradas arriba
}
add_action( 'init', 'clickbutton_init' );

/**
 * Función para verificar la existencia de las tablas (para depuración)
 */
function clickbutton_verify_tables() {
    global $wpdb;
    $table_buttons = $wpdb->prefix . 'clickbutton_buttons';
    $table_clicks  = $wpdb->prefix . 'clickbutton_clicks';

    $buttons_exists = $wpdb->get_var( "SHOW TABLES LIKE '$table_buttons'" ) === $table_buttons;
    $clicks_exists  = $wpdb->get_var( "SHOW TABLES LIKE '$table_clicks'" ) === $table_clicks;

    if ( ! $buttons_exists || ! $clicks_exists ) {
        error_log( 'CLICKBUTTON ERROR: Las tablas wp_clickbutton_buttons o wp_clickbutton_clicks no existen.' );
    } else {
        error_log( 'CLICKBUTTON DEBUG: Las tablas wp_clickbutton_buttons y wp_clickbutton_clicks existen.' );
    }
}
// Hook para verificar tablas después de la inicialización
add_action( 'init', 'clickbutton_verify_tables' );
?>
