<?php
/**
 * Plugin Name: AISEO
 * Plugin URI: https://tecnologicai.es
 * Description: FREEMIUM AISEO. Genera sitemaps, robots.txt y optimiza tu contenido con herramientas inteligentes para atraer más tráfico y mejorar tu posicionamiento en Google. ¡Impulsa tu presencia online ahora!
 * Version: 1.5 Modular
 * Author: Vicente Pausá Peris
 * Author URI: https://tecnologicai.es
 * License: GPLv2 or later
 */

// Evitar acceso directo al archivo
if (!defined('ABSPATH')) {
    exit;
}

// Incluir funcionalidades del plugin
require_once plugin_dir_path(__FILE__) . 'includes/class-aiseo-robots-handler.php';   // Gestión del archivo Robots.txt
require_once plugin_dir_path(__FILE__) . 'includes/class-aiseo-google-integration.php'; // Gestión de google data
require_once plugin_dir_path(__FILE__) . 'includes/class-aiseo-api-key.php'; // Gestión APIKEY
$file_path = plugin_dir_path(__FILE__) . 'includes/class-aiseo-json-handler.php';
if (!file_exists($file_path)) {
    error_log('Archivo no encontrado: ' . $file_path);
}

require_once plugin_dir_path(__FILE__) . 'includes/class-aiseo-json-handler.php'; // Gestión archivo JSON




// Redirigir al sistema de WordPress para Sitemap
add_action('init', function () {
    if (function_exists('wp_sitemaps_get_server')) {
        add_filter('wp_sitemaps_enabled', '__return_true'); // Asegurar que los sitemaps nativos están habilitados
    }
});

// Agregar el menú en el panel de administración
add_action('admin_menu', function () {
    add_menu_page(
        'AISEO',                // Título de la página
        'AISEO',                // Nombre del menú
        'manage_options',       // Capacidad requerida
        'aiseo',                // Slug del menú
        'aiseo_main_page',      // Función para mostrar la página principal
        'dashicons-chart-area', // Ícono del menú
        80                      // Posición en el menú
    );

    // Submenú: Métricas de Google Data
    add_submenu_page(
        'aiseo',                      // Slug del menú principal
        'Métricas de Google Data',    // Título de la página
        'Ver Métricas',               // Nombre del submenú
        'manage_options',             // Capacidad requerida
        'aiseo_google_data_metrics',  // Slug del submenú
        'aiseo_google_data_metrics_page' // Función para mostrar la página
    );

    // Submenú: Configuración de Sitemap
    add_submenu_page(
        'aiseo',                     // Slug del menú principal
        'Configuración de Sitemap', // Título de la página
        'Sitemap',                   // Nombre del submenú
        'manage_options',            // Capacidad requerida
        'aiseo_sitemap_settings',    // Slug del submenú
        'aiseo_sitemap_page'         // Función para mostrar la página
    );

    // Submenú: Configuración de Robots.txt
    add_submenu_page(
        'aiseo',                      // Slug del menú principal
        'Configuración de Robots.txt', // Título de la página
        'Robots.txt',                 // Nombre del submenú
        'manage_options',             // Capacidad requerida
        'aiseo_robots_settings',      // Slug del submenú
        'aiseo_robots_page'           // Función para mostrar la página
    );


   // Submenú: Configuración de Google Data
   add_submenu_page(
    'aiseo',                      // Slug del menú principal
    'Configuración de Google Data', // Título de la página
    'Configuración Google Data',                // Nombre del submenú
    'manage_options',             // Capacidad requerida
    'aiseo_google_data_settings', // Slug del submenú
    'aiseo_google_data_settings_page'      // Función para mostrar la página
    );
    

});

// Configuración para inicialización de Google Data
add_action('admin_init', function () {
    register_setting('aiseo_google_settings_group', 'aiseo_google_auth_config_path');
    add_settings_section('aiseo_google_main_section', 'Configuración de Google', null, 'aiseo_google_settings');

    add_settings_field(
        'aiseo_google_auth_config_path',
        'Ruta del archivo JSON de la cuenta de servicio',
        function () {
            $value = get_option('aiseo_google_auth_config_path', '');
            echo '<input type="text" name="aiseo_google_auth_config_path" value="' . esc_attr($value) . '" class="regular-text">';
            echo '<p class="description">Introduce la ruta completa al archivo JSON de la cuenta de servicio de Google o usa el botón para cargarlo.</p>';
            echo '<form method="post" enctype="multipart/form-data">';
            echo '<input type="file" name="aiseo_google_json_file" accept=".json" required>'; // Botón con validación para subir archivo
            echo '<button type="submit" class="button button-secondary">Subir Archivo</button>';
            echo '</form>';
            if ($_FILES['aiseo_google_json_file'] ?? false) {
                $uploaded_file = $_FILES['aiseo_google_json_file'];

                if ($uploaded_file['type'] !== 'application/json') {
                    echo '<p class="description" style="color: red;">Error: El archivo debe ser un JSON válido.</p>';
                } else {
                    $upload_dir = wp_upload_dir()['basedir'] . '/aiseo_google_keys';
                    if (!file_exists($upload_dir)) {
                        mkdir($upload_dir, 0755, true);
                    }
                    $file_path = $upload_dir . '/' . basename($uploaded_file['name']);
                    if (move_uploaded_file($uploaded_file['tmp_name'], $file_path)) {
                        update_option('aiseo_google_auth_config_path', $file_path);
                        echo '<p class="description" style="color: green;">Archivo JSON subido y configurado exitosamente.</p>';
                    } else {
                        echo '<p class="description" style="color: red;">Error: No se pudo subir el archivo.</p>';
                    }
                }
            }
        },
        'aiseo_google_settings',
        'aiseo_google_main_section'
    );
});

function aiseo_main_page() {
    echo '<div class="wrap">';
    echo '<h1>AISEO - Panel Principal</h1>';
    echo '<p>Bienvenido a AISEO, tu herramienta para optimizar tu sitio web.</p>';

    // Botones con indicadores
    echo '<h2>Configuraciones</h2>';
    echo '<div style="display: flex; flex-wrap: wrap; gap: 20px; align-items: center;">';

    // Botón para Configuración de Sitemap
    echo '<div>';
    echo '<a href="' . admin_url('admin.php?page=aiseo_sitemap_settings') . '" class="button button-primary">Configurar Sitemap</a>';
    echo aiseo_get_status_indicator('sitemap');
    echo '</div>';

    // Botón para Configuración de Robots.txt
    echo '<div>';
    echo '<a href="' . admin_url('admin.php?page=aiseo_robots_settings') . '" class="button button-primary">Configurar Robots.txt</a>';
    echo aiseo_get_status_indicator('robots');
    echo '</div>';

    // Botón para Configuración de Google Data
    echo '<div>';
    echo '<a href="' . admin_url('admin.php?page=aiseo_google_data_settings') . '" class="button button-primary">Configuración de Google Data</a>';
    echo aiseo_get_status_indicator('google_data');
    echo '</div>';

    // Botón para Ver Métricas de Google Data
    echo '<div>';
    echo '<a href="' . admin_url('admin.php?page=aiseo_google_data_metrics') . '" class="button button-primary">Ver Métricas de Google Data</a>';
    echo aiseo_get_status_indicator('google_metrics');
    echo '</div>';

    echo '</div>';

    // Separador visual
    echo '<hr style="margin: 20px 0;">';

    // Previsualización del Sitemap
    echo '<h2>Previsualización del Sitemap</h2>';
    echo '<p>A continuación, puedes ver una vista previa de tu Sitemap generado:</p>';
    echo '<iframe src="' . site_url('/sitemap.xml') . '" style="width: 100%; height: 400px; border: 1px solid #ddd;"></iframe>';

    // Separador visual
    echo '<hr style="margin: 20px 0;">';

    // Previsualización del Robots.txt
    echo '<h2>Previsualización del Robots.txt</h2>';
    echo '<p>A continuación, puedes ver una vista previa de tu archivo Robots.txt:</p>';
    echo '<iframe src="' . site_url('/robots.txt') . '" style="width: 100%; height: 200px; border: 1px solid #ddd;"></iframe>';

    echo '</div>';
}

/**
 * Genera un indicador de estado para botones del panel principal.
 */
function aiseo_get_status_indicator($type) {
    $status = false;

    switch ($type) {
        case 'sitemap':
            $status = get_option('aiseo_sitemap_settings', false);
            break;
        case 'robots':
            $status = file_exists(plugin_dir_path(__FILE__) . 'robots.txt');
            break;
        case 'google_data':
        case 'google_metrics':
            $config_path = get_option('aiseo_google_auth_config_path', '');
            $site_url = get_option('aiseo_site_url', '');
            $status = !empty($config_path) && file_exists($config_path) && !empty($site_url);
            break;
    }

    $color = $status ? 'green' : 'red';
    $text = $status ? 'Conectado' : 'Desconectado';

    return '<span style="margin-left: 10px; padding: 3px 10px; background-color: ' . $color . '; color: white; border-radius: 3px; font-size: 12px;">' . $text . '</span>';
}


function aiseo_sitemap_page() {
    echo '<div class="wrap">';

    // Botón "Volver a la página principal"
    echo '<a href="' . admin_url('admin.php?page=aiseo') . '" class="button button-primary" style="margin-bottom: 20px;">Volver a la página principal</a>';

    // Título de la página
    echo '<h1>Configuración de Sitemap</h1>';
    echo '<p>Aquí puedes gestionar las opciones de tu Sitemap y generar uno manualmente si es necesario.</p>';

    // Estado del Sitemap
    $sitemap_status = get_option('aiseo_sitemap_settings', false);
    if ($sitemap_status) {
        echo '<div style="margin-bottom: 20px; padding: 10px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; border-radius: 5px;">';
        echo '<strong>Estado:</strong> Sitemap activado correctamente.';
        echo '</div>';
    } else {
        echo '<div style="margin-bottom: 20px; padding: 10px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; border-radius: 5px;">';
        echo '<strong>Estado:</strong> Sitemap desactivado. Por favor, activa la opción de Sitemap para continuar.';
        echo '</div>';
    }

    // Opciones de configuración
    echo '<form method="post" action="' . admin_url('admin-post.php') . '">';
    echo '<input type="hidden" name="action" value="aiseo_generate_sitemap">';
    echo '<h2>Opciones de Contenido</h2>';
    echo '<label><input type="checkbox" name="sitemap_posts" checked> Incluir Entradas</label><br>';
    echo '<label><input type="checkbox" name="sitemap_pages" checked> Incluir Páginas</label><br>';
    echo '<label><input type="checkbox" name="sitemap_categories" checked> Incluir Categorías</label><br>';
    echo '<p class="description">Selecciona los tipos de contenido que deseas incluir en tu Sitemap.</p>';

    // Opciones avanzadas
    echo '<h2>Opciones Avanzadas</h2>';
    echo '<table style="margin-top: 10px; border-spacing: 10px;">';
    echo '<tr>';
    echo '<td><label for="sitemap_changefreq"><strong>Frecuencia de Cambios:</strong></label></td>';
    echo '<td>';
    echo '<select name="sitemap_changefreq" id="sitemap_changefreq">';
    echo '<option value="always">Siempre</option>';
    echo '<option value="hourly">Cada hora</option>';
    echo '<option value="daily" selected>Diariamente</option>';
    echo '<option value="weekly">Semanalmente</option>';
    echo '<option value="monthly">Mensualmente</option>';
    echo '<option value="yearly">Anualmente</option>';
    echo '<option value="never">Nunca</option>';
    echo '</select>';
    echo '</td>';
    echo '</tr>';
    echo '<tr>';
    echo '<td><label for="sitemap_priority"><strong>Prioridad:</strong></label></td>';
    echo '<td><input type="number" name="sitemap_priority" id="sitemap_priority" min="0.1" max="1.0" step="0.1" value="0.8"></td>';
    echo '</tr>';
    echo '</table>';
    echo '<p class="description">Configura cómo los motores de búsqueda deben priorizar tu contenido.</p>';

    // Botón para guardar configuraciones y generar Sitemap
    echo '<button type="submit" class="button button-primary">Guardar y Generar Sitemap</button>';
    echo '</form>';

    // Previsualización del Sitemap
    echo '<h2>Previsualización del Sitemap</h2>';
    echo '<p>A continuación, puedes ver una vista previa de tu Sitemap generado:</p>';
    echo '<iframe src="' . site_url('/sitemap.xml') . '" style="width: 100%; height: 400px; border: 1px solid #ddd; background-color: #fff;"></iframe>';

    echo '</div>';
}

function aiseo_robots_page() {
    echo '<div class="wrap">';

    // Botón "Volver a la página principal"
    echo '<a href="' . admin_url('admin.php?page=aiseo') . '" class="button button-primary" style="margin-bottom: 20px;">Volver a la página principal</a>';

    // Título de la página
    echo '<h1>Configuración de Robots.txt</h1>';
    echo '<p>Aquí puedes gestionar y editar tu archivo Robots.txt. <strong>Nota:</strong> Los cambios pueden afectar qué partes de tu sitio son visibles para los motores de búsqueda.</p>';

    // Estado del archivo Robots.txt
    $robots_path = plugin_dir_path(__FILE__) . 'robots.txt';
    if (file_exists($robots_path)) {
        echo '<div style="margin-bottom: 20px; padding: 10px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; border-radius: 5px;">';
        echo '<strong>Estado:</strong> Archivo Robots.txt encontrado y activo.';
        echo '</div>';
    } else {
        echo '<div style="margin-bottom: 20px; padding: 10px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; border-radius: 5px;">';
        echo '<strong>Estado:</strong> Archivo Robots.txt no encontrado. Por favor, crea uno para habilitar esta función.';
        echo '</div>';
    }

    // Editor de contenido de Robots.txt
    echo '<h2>Editar Robots.txt</h2>';
    echo '<form method="post" action="' . admin_url('admin-post.php') . '">';
    echo '<textarea name="robots_content" rows="10" cols="50" class="large-text code" style="font-family: monospace;">' . esc_textarea(file_exists($robots_path) ? file_get_contents($robots_path) : "User-agent: *\nDisallow: /wp-admin/\nAllow: /wp-admin/admin-ajax.php\nSitemap: " . site_url('/sitemap.xml')) . '</textarea>';
    echo '<p class="description">Edita el archivo Robots.txt directamente desde aquí.</p>';
    echo '<input type="hidden" name="action" value="aiseo_save_robots">';
    echo '<button type="submit" class="button button-primary">Guardar Cambios</button>';
    echo '</form>';

    // Previsualización de Robots.txt
    echo '<h2>Previsualización del Robots.txt</h2>';
    echo '<p>A continuación, puedes ver una vista previa de tu archivo Robots.txt:</p>';
    echo '<iframe src="' . site_url('/robots.txt') . '" style="width: 100%; height: 200px; border: 1px solid #ddd; background-color: #fff;"></iframe>';

    echo '</div>';
}

function aiseo_google_data_metrics_page() {
    echo '<div class="wrap">';
    echo '<a href="' . admin_url('admin.php?page=aiseo') . '" class="button button-primary" style="margin-bottom: 20px;">Volver a la página principal</a>';
    echo '<h1>Métricas de Google Data</h1>';
    echo '<p>Aquí puedes ver las métricas extraídas de Google Search Console para tu sitio web.</p>';

    // Instanciar la clase para obtener métricas
    $google_integration = new Aiseo_Google_Integration();
    $currentSiteUrl = get_option('aiseo_site_url', '');

    if (!$currentSiteUrl) {
        echo '<div style="margin-bottom: 20px; padding: 10px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; border-radius: 5px;">';
        echo '<strong>Error:</strong> No se ha configurado ninguna URL del sitio. Por favor, configúrala primero en la página de Configuración de Google Data.';
        echo '</div>';
        return;
    }

    $startDate = isset($_GET['start_date']) ? $_GET['start_date'] : date('Y-m-d', strtotime('-7 days'));
    $endDate = isset($_GET['end_date']) ? $_GET['end_date'] : date('Y-m-d');

    echo '<form method="get" action="">';
    echo '<input type="hidden" name="page" value="aiseo_google_data_metrics">';
    echo '<label for="start_date">Desde:</label>';
    echo '<input type="date" name="start_date" value="' . esc_attr($startDate) . '">';
    echo '<label for="end_date">Hasta:</label>';
    echo '<input type="date" name="end_date" value="' . esc_attr($endDate) . '">';
    echo '<button type="submit" class="button button-primary">Actualizar</button>';
    echo '</form>';

    $metrics = $google_integration->get_metrics($currentSiteUrl, $startDate, $endDate);

    if (is_array($metrics)) {
        echo '<table class="widefat" style="margin-top: 20px;">';
        echo '<thead><tr><th>Fecha</th><th>Impresiones</th><th>Clics</th><th>CTR</th><th>Posición</th></tr></thead>';
        echo '<tbody>';

        if (!empty($metrics)) {
            foreach ($metrics as $row) {
                $date = $row['keys'][0] ?? 'N/A';
                $clicks = $row['clicks'] ?? 0;
                $impressions = $row['impressions'] ?? 0;
                $ctr = isset($row['ctr']) ? round($row['ctr'] * 100, 2) . '%' : 'N/A';
                $position = isset($row['position']) ? round($row['position'], 2) : 'N/A';

                echo "<tr><td>{$date}</td><td>{$impressions}</td><td>{$clicks}</td><td>{$ctr}</td><td>{$position}</td></tr>";
            }
        } else {
            echo '<tr><td colspan="5">No hay datos disponibles para este rango de fechas.</td></tr>';
        }

        echo '</tbody>';
        echo '</table>';
    } else {
        echo $metrics; // Mostrar mensaje de error.
    }

    echo '</div>';
}

function aiseo_google_data_settings_page() {
    echo '<div class="wrap">';

    // Botones de navegación
echo '<div style="margin-bottom: 20px; display: flex; gap: 10px;">';
echo '<a href="' . admin_url('admin.php?page=aiseo') . '" class="button button-primary">Volver a la página principal</a>';
echo '<a href="' . admin_url('admin.php?page=aiseo_google_data_metrics') . '" class="button button-primary">Ver Métricas</a>';
echo '</div>';

    // Título
    echo '<h1>Configuración de Google Data</h1>';
    echo '<p>Aquí puedes gestionar la integración con las APIs de Google y cargar tus datos. Si necesitas ayuda para generar tu archivo JSON o configurar el acceso a las APIs, consulta la <a href="https://cloud.google.com/docs/authentication/getting-started" target="_blank">guía oficial de Google</a>.</p>';

	
	// *** API Key ***
	echo '<h2>Configurar API Key</h2>';
	$apiKey = get_option('aiseo_google_api_key', '');
	echo '<form method="post">';
	echo '<label for="aiseo_google_api_key">Introduce tu API Key de Google:</label>';
	echo '<input type="text" name="aiseo_google_api_key" id="aiseo_google_api_key" 	autocomplete="off" value="" class="regular-text" required>'; // Agregado autocomplete="off"
	echo '<button type="submit" class="button button-primary" style="margin-left: 10px;">Guardar API Key</button>';
	echo '</form>';

	// Manejar la lógica de guardar la API Key
	Aiseo_Api_Key::handle_form_submission();

	// Mostrar el estado de la API Key
	Aiseo_Api_Key::display_status();

    // *** Configurar Archivo JSON ***
    echo '<h2 style="margin-top: 30px;">Configurar Archivo JSON</h2>';

    // Mostrar el formulario de subida de archivo JSON
    Aiseo_Json_Handler::display_upload_form();

    // Manejar la lógica de subir el archivo JSON
    Aiseo_Json_Handler::handle_file_upload();

    // Mostrar el estado del archivo JSON
    Aiseo_Json_Handler::display_status();


    // *** Validación de URL contra Search Console ***
    echo '<h2>Configurar URL del Sitio</h2>';
    echo '<form method="post">';
    echo '<div style="display: flex; align-items: center;">';
    echo '<span style="font-weight: bold; margin-right: 10px;">https://</span>';
    echo '<input type="text" name="aiseo_site_url" value="' . esc_attr(str_replace(['http://', 'https://'], '', $currentSiteUrl)) . '" class="regular-text" required>';
    echo '<button type="submit" class="button button-primary" style="margin-left: 10px;">Guardar URL</button>';
    echo '</div>';
    echo '</form>';

    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['aiseo_site_url'])) {
        $siteUrlInput = sanitize_text_field($_POST['aiseo_site_url']);
        $formattedUrl = 'https://' . str_replace(['http://', 'https://'], '', $siteUrlInput);

        if (filter_var($formattedUrl, FILTER_VALIDATE_URL)) {
            update_option('aiseo_site_url', $formattedUrl);

            // Validar propiedad en Search Console
            $googleClient = new Google_Client();
            $googleClient->setAuthConfig(get_option('aiseo_google_auth_config_path'));
            $searchConsole = new Google_Service_Webmasters($googleClient);

            try {
                $siteVerification = false;
                $verifiedSites = $searchConsole->sites->listSites();

                foreach ($verifiedSites as $site) {
                    if (rtrim($site->getSiteUrl(), '/') === rtrim($formattedUrl, '/')) {
                        $siteVerification = true;
                        break;
                    }
                }

                if ($siteVerification) {
                    echo '<div style="margin-top: 20px; padding: 10px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; border-radius: 5px;">';
                    echo '<strong>Éxito:</strong> La URL coincide con una propiedad verificada en Google Search Console.</div>';
                } else {
                    echo '<div style="margin-top: 20px; padding: 10px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; border-radius: 5px;">';
                    echo '<strong>Error:</strong> La URL no coincide con ninguna propiedad verificada en Google Search Console.</div>';
                }
            } catch (Exception $e) {
                echo '<div style="margin-top: 20px; padding: 10px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; border-radius: 5px;">';
                echo '<strong>Error:</strong> No se pudo validar la URL. Asegúrate de que el archivo JSON esté configurado correctamente.</div>';
            }
        }
    }
	
// *** Estado de la URL ***
$currentSiteUrl = get_option('aiseo_site_url', '');
if (!empty($currentSiteUrl)) {
    echo '<div style="margin: 20px 0; padding: 10px; background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; border-radius: 5px;">';
    echo '<strong>Estado:</strong> La URL del sitio está configurada correctamente: ' . esc_html($currentSiteUrl);
    echo '</div>';
} else {
    echo '<div style="margin: 20px 0; padding: 10px; background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; border-radius: 5px;">';
    echo '<strong>Estado:</strong> No se ha configurado ninguna URL del sitio. Por favor, introdúcela a continuación.';
    echo '</div>';
}

    echo '</div>';
}

// Asegurar que las reglas de reescritura se actualicen al activar el plugin
register_activation_hook(__FILE__, function () {
    flush_rewrite_rules();
});

// Asegurar que las reglas de reescritura se eliminen al desactivar el plugin
register_deactivation_hook(__FILE__, function () {
    flush_rewrite_rules();
});

?>