api = $api; } /** * Agregar menu en el admin de WordPress */ public function add_menu() { add_menu_page( 'Agentia Chat', 'Agentia Chat', 'manage_options', 'agentia-chat', [$this, 'render_page'], 'dashicons-format-chat', 30 ); } /** * Cargar CSS y JS del admin */ public function enqueue_assets($hook) { if ($hook !== 'toplevel_page_agentia-chat') return; wp_enqueue_style('agentia-admin', AGENTIA_PLUGIN_URL . 'admin/css/admin-style.css', [], AGENTIA_VERSION); wp_enqueue_script('agentia-admin', AGENTIA_PLUGIN_URL . 'admin/js/admin-script.js', ['jquery'], AGENTIA_VERSION, true); wp_localize_script('agentia-admin', 'agentiaAdmin', [ 'ajaxUrl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('agentia_nonce'), 'accountId' => get_option('agentia_account_id', ''), ]); } /** * Renderizar la pagina principal del plugin */ public function render_page() { $status = get_option('agentia_account_status', 'disconnected'); if ($status === 'active' || $status === 'disabled') { include AGENTIA_PLUGIN_DIR . 'admin/views/dashboard.php'; } else { include AGENTIA_PLUGIN_DIR . 'admin/views/register.php'; } } /** * AJAX: Login con correo y contraseña */ public function ajax_login() { check_ajax_referer('agentia_nonce', 'nonce'); $email = isset($_POST['email']) ? sanitize_email(wp_unslash($_POST['email'])) : ''; $password = isset($_POST['password']) ? sanitize_text_field(wp_unslash($_POST['password'])) : ''; if (empty($email) || empty($password)) { wp_send_json_error(['message' => 'Escribe tu correo y contraseña']); } $result = $this->api->login($email, $password, get_site_url()); if (isset($result['error'])) { // Si el backend devuelve un mensaje (ej. error 3178 de sitio ya vinculado), // se reenvia al frontend para que el cliente entienda que pasa. $msg = !empty($result['error']) ? $result['error'] : 'Correo o contraseña incorrectos'; wp_send_json_error(['message' => $msg]); } $type = isset($result['type']) ? $result['type'] : ''; // Empresa activa if ($type === 'active' && isset($result['data']['apiKey'])) { update_option('agentia_api_key', $result['data']['apiKey']); update_option('agentia_account_id', $result['data']['id']); update_option('agentia_id_company', $result['data']['idCompany']); update_option('agentia_account_status', 'active'); wp_send_json_success(['message' => 'Conectado', 'type' => 'active']); } // Empresa deshabilitada (no pago) if ($type === 'disabled' && isset($result['data']['apiKey'])) { update_option('agentia_api_key', $result['data']['apiKey']); update_option('agentia_account_id', $result['data']['id']); update_option('agentia_id_company', $result['data']['idCompany']); update_option('agentia_account_status', 'disabled'); wp_send_json_success(['message' => 'Cuenta suspendida', 'type' => 'disabled']); } // Pre-registro pendiente de pago if ($type === 'pre-registro') { update_option('agentia_account_status', 'pending'); wp_send_json_success(['message' => 'Pendiente de pago', 'type' => 'pre-registro']); } wp_send_json_error(['message' => 'No se pudo iniciar sesión. Contacta a soporte.']); } /** * AJAX: Obtener flujos disponibles */ public function ajax_get_flows() { check_ajax_referer('agentia_nonce', 'nonce'); $id_company = get_option('agentia_id_company', ''); if (empty($id_company)) { wp_send_json_error(['message' => 'No hay cuenta conectada']); } $result = $this->api->get_configs_by_company($id_company); if (isset($result['error'])) { wp_send_json_error(['message' => $result['error']]); } wp_send_json_success($result); } /** * AJAX: Seleccionar flujo activo */ public function ajax_select_flow() { check_ajax_referer('agentia_nonce', 'nonce'); $id_config = isset($_POST['idConfig']) ? intval(wp_unslash($_POST['idConfig'])) : 0; if (!$id_config) { wp_send_json_error(['message' => 'Selecciona un flujo']); } update_option('agentia_account_id', $id_config); wp_send_json_success(['message' => 'Flujo actualizado']); } /** * AJAX: Obtener SSO URL para auto-login en el frontend */ public function ajax_sso_redirect() { check_ajax_referer('agentia_nonce', 'nonce'); $api_key = get_option('agentia_api_key', ''); if (empty($api_key)) { wp_send_json_error(['message' => 'No hay cuenta conectada']); } $result = $this->api->get_sso_code($api_key); if (isset($result['error'])) { wp_send_json_error(['message' => $result['error']]); } if (!isset($result['code'])) { wp_send_json_error(['message' => 'No se pudo generar el acceso']); } $frontend_url = 'https://www.ia.soyagentia.com/authentication/auto-login?code=' . urlencode($result['code']); wp_send_json_success(['url' => $frontend_url]); } /** * AJAX: Obtener estadísticas */ public function ajax_get_stats() { check_ajax_referer('agentia_nonce', 'nonce'); $account_id = get_option('agentia_account_id'); if (!$account_id) { wp_send_json_error(['message' => 'No hay cuenta conectada']); } $result = $this->api->get_stats($account_id); if (isset($result['error'])) { wp_send_json_error(['message' => $result['error']]); } wp_send_json_success($result); } }