prepare( "SELECT id FROM transit_trips WHERE route_id=? AND trip_date=? AND status='started' LIMIT 1" ); $st->execute([$routeId, date('Y-m-d')]); $row = $st->fetch(); $tripId = $row ? (int)$row['id'] : 0; } if (!$tripId) jsonError('No active trip found', 404); $st = $transit_con->prepare( "SELECT t.id, t.org_id, t.status, t.delay_minutes, t.current_stop_seq, t.started_at, r.name_ar AS route_name, sc.departure_time, d.name AS driver_name FROM transit_trips t JOIN transit_routes r ON r.id = t.route_id JOIN transit_schedules sc ON sc.id = t.schedule_id JOIN transit_drivers d ON d.id = t.driver_id WHERE t.id=? LIMIT 1" ); $st->execute([$tripId]); $trip = $st->fetch(); if (!$trip) jsonError('Trip not found', 404); // الراكب يحتاج عضوية نشطة في مؤسسة هذا الخط قبل رؤية موقع الباص $chk = $transit_con->prepare( "SELECT id FROM transit_enrollments WHERE org_id=? AND passenger_id=? AND status='active' LIMIT 1" ); $chk->execute([$trip['org_id'], $transit_user_id]); if (!$chk->fetch()) jsonError('Active enrollment required', 403); $stStops = $transit_con->prepare( "SELECT s.id, s.sequence, s.name_ar, s.latitude, s.longitude, s.geofence_radius, s.eta_offset_min, s.is_major FROM transit_stops s JOIN transit_trips t ON t.route_id = s.route_id WHERE t.id=? ORDER BY s.sequence ASC" ); $stStops->execute([$tripId]); jsonSuccess([ 'trip' => $trip, 'bus_position' => transitGetBusPosition($tripId), 'stops' => $stStops->fetchAll(), ]);