false, 'ERROR' => 'method_not_allowed'], 405); } $query = trim($_GET['Query'] ?? ''); $project = trim($_GET['Project'] ?? ''); $limit = min(max((int) ($_GET['Limit'] ?? 25), 1), 100); if ($query === '') jsonResponse(['OK' => false, 'ERROR' => 'query_required']); $searchTerm = '%' . $query . '%'; $sql = "SELECT * FROM Sprinter_Agents WHERE (AgentName LIKE ? OR FullAddress LIKE ? OR Role LIKE ?) AND IsActive = 1"; $params = [$searchTerm, $searchTerm, $searchTerm]; if ($project !== '') { $sql .= " AND ProjectName = ?"; $params[] = $project; } $sql .= " ORDER BY AgentName ASC LIMIT ?"; $params[] = $limit; $rows = queryTimed($sql, $params); $users = []; foreach ($rows as $a) { $users[] = [ 'ID' => (int) $a['ID'], 'AgentName' => $a['AgentName'], 'FullAddress' => $a['FullAddress'], 'ProjectName' => $a['ProjectName'], 'AgentType' => $a['AgentType'], 'Role' => $a['Role'], 'IsActive' => true, 'CreatedAt' => toISO8601($a['CreatedAt']), ]; } jsonResponse(['OK' => true, 'Users' => $users]);