false, 'error' => 'Unauthorized']); exit; } try { $pdo = db(); $user_id = $_SESSION['user_id']; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $input = json_decode(file_get_contents('php://input'), true); $message = $input['message'] ?? ''; $context = $input['context'] ?? null; // New: get context if (empty(trim($message))) { echo json_encode(['success' => false, 'error' => 'Message cannot be empty.']); exit; } // New: Handle simulation context if ($context === 'vpn' || $context === 'antivirus') { $ai_input = [['role' => 'user', 'content' => $message]]; $ai_response = LocalAIApi::createResponse(['input' => $ai_input]); $ai_message = LocalAIApi::extractText($ai_response); if (!empty($ai_message)) { echo json_encode(['success' => true, 'data' => $ai_message]); } else { echo json_encode(['success' => false, 'error' => 'Failed to get AI response.']); } exit; // Stop execution for simulations } // --- Existing Chat Logic --- $personality = $input['personality'] ?? ''; $stmt = $pdo->prepare("INSERT INTO messages (user_id, message) VALUES (?, ?)"); $stmt->execute([$user_id, $message]); // --- AI CONTEXT PREPARATION --- // 1. Prepare the system prompt (personality) $final_ai_input = []; if (!empty(trim($personality))) { $final_ai_input[] = ['role' => 'system', 'content' => $personality]; } // 2. Get last 5 messages for conversation history $stmt = $pdo->query("SELECT m.message, u.username FROM messages m JOIN users u ON m.user_id = u.id ORDER BY m.created_at DESC LIMIT 5"); $recent_messages = $stmt->fetchAll(PDO::FETCH_ASSOC); $conversation_history = array_map(function($msg) { return ['role' => $msg['username'] === 'AI' ? 'assistant' : 'user', 'content' => $msg['message']]; }, array_reverse($recent_messages)); // 3. Combine system prompt with conversation history $final_ai_input = array_merge($final_ai_input, $conversation_history); // --- CALL THE AI --- $ai_response = LocalAIApi::createResponse(['input' => $final_ai_input]); $ai_message = LocalAIApi::extractText($ai_response); if (!empty($ai_message)) { $stmt = $pdo->prepare("SELECT id FROM users WHERE username = 'AI'"); $stmt->execute(); $ai_user = $stmt->fetch(PDO::FETCH_ASSOC); if ($ai_user) { $stmt = $pdo->prepare("INSERT INTO messages (user_id, message) VALUES (?, ?)"); $stmt->execute([$ai_user['id'], $ai_message]); } } echo json_encode(['success' => true, 'message' => 'Message saved.']); } elseif ($_SERVER['REQUEST_METHOD'] === 'GET') { if (isset($_GET['action']) && $_GET['action'] === 'reset') { // Truncate the messages table to reset the chat $pdo->query("TRUNCATE TABLE messages"); echo json_encode(['success' => true, 'message' => 'Chat history has been cleared.']); } else { $stmt = $pdo->query("SELECT m.id, m.message, m.created_at, u.username, LEFT(u.username, 1) as user_initial FROM messages m JOIN users u ON m.user_id = u.id ORDER BY m.created_at ASC"); $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); echo json_encode(['success' => true, 'messages' => $messages, 'currentUser' => $_SESSION['username']]); } } else { http_response_code(405); echo json_encode(['success' => false, 'error' => 'Method Not Allowed']); } } catch (PDOException $e) { http_response_code(500); echo json_encode(['success' => false, 'error' => 'Database error: ' . $e->getMessage()]); } ?>