'error', 'message' => 'Unauthorized'])); } $action = $_GET['action'] ?? ''; try { $con = Database::get('main'); switch ($action) { case 'get_task': // The bot asks for a task to do $platform = $_GET['platform'] ?? 'facebook'; // Find a pending task that is scheduled for now or earlier $stmt = $con->prepare(" SELECT id, type, target_url, prompt_context, generated_comment FROM social_tasks WHERE status = 'pending' AND platform = ? AND (scheduled_at IS NULL OR scheduled_at <= NOW()) ORDER BY created_at ASC LIMIT 1 "); $stmt->execute([$platform]); $task = $stmt->fetch(PDO::FETCH_ASSOC); if ($task) { // Mark as in progress $update = $con->prepare("UPDATE social_tasks SET status = 'in_progress' WHERE id = ?"); $update->execute([$task['id']]); echo json_encode(['status' => 'success', 'data' => $task]); } else { echo json_encode(['status' => 'success', 'message' => 'No tasks available', 'data' => null]); } break; case 'complete_task': // The bot reports task completion $taskId = $_POST['task_id'] ?? null; $result = $_POST['result'] ?? ''; // e.g. success or error details if ($taskId) { $stmt = $con->prepare("UPDATE social_tasks SET status = 'completed', completed_at = NOW() WHERE id = ?"); $stmt->execute([$taskId]); // Log it $log = $con->prepare("INSERT INTO social_logs (task_id, log_level, message) VALUES (?, 'info', ?)"); $log->execute([$taskId, "Task completed: " . substr($result, 0, 200)]); echo json_encode(['status' => 'success']); } else { echo json_encode(['status' => 'error', 'message' => 'task_id required']); } break; case 'fail_task': // The bot reports task failure $taskId = $_POST['task_id'] ?? null; $errorMsg = $_POST['error_message'] ?? 'Unknown error'; if ($taskId) { $stmt = $con->prepare("UPDATE social_tasks SET status = 'failed', error_message = ? WHERE id = ?"); $stmt->execute([$errorMsg, $taskId]); // Log it $log = $con->prepare("INSERT INTO social_logs (task_id, log_level, message) VALUES (?, 'error', ?)"); $log->execute([$taskId, "Task failed: " . substr($errorMsg, 0, 200)]); echo json_encode(['status' => 'success']); } else { echo json_encode(['status' => 'error', 'message' => 'task_id required']); } break; case 'log': // The bot sends a general log $accountId = $_POST['account_id'] ?? null; $level = $_POST['level'] ?? 'info'; $message = $_POST['message'] ?? ''; $log = $con->prepare("INSERT INTO social_logs (account_id, log_level, message) VALUES (?, ?, ?)"); $log->execute([$accountId, $level, $message]); echo json_encode(['status' => 'success']); break; default: echo json_encode(['status' => 'error', 'message' => 'Invalid action']); } } catch (Exception $e) { http_response_code(500); echo json_encode(['status' => 'error', 'message' => 'Database error: ' . $e->getMessage()]); }