getConnection(); function jsonOut(array $payload): void { if (ob_get_length() !== false) { ob_end_clean(); } header('Content-Type: application/json; charset=utf-8'); echo json_encode($payload, JSON_UNESCAPED_UNICODE); exit; } try { $sql = "SELECT ss.idserviceschedule, s.servicename, COALESCE(s.maxcapacity, 0) AS maxcapacity, DATE_FORMAT(ss.dateschedule, '%d %M %Y %H:%i') AS display_dateschedule, DATE_FORMAT(ss.dateschedule, '%Y-%m-%d %H:%i') AS iso_dateschedule, (SELECT COUNT(*) FROM bookingclass bc WHERE bc.idserviceschedule = ss.idserviceschedule AND bc.status != 'cancelled') AS occupied_seats FROM serviceschedule ss LEFT JOIN service s ON ss.idservice = s.idservice ORDER BY ss.dateschedule ASC"; $rows = $pdo->query($sql)->fetchAll(); $italianMonths = [ 'January' => 'Gennaio', 'February' => 'Febbraio', 'March' => 'Marzo', 'April' => 'Aprile', 'May' => 'Maggio', 'June' => 'Giugno', 'July' => 'Luglio', 'August' => 'Agosto', 'September' => 'Settembre', 'October' => 'Ottobre', 'November' => 'Novembre', 'December' => 'Dicembre', ]; $classes = []; foreach ($rows as $row) { // Traduci il mese in italiano nella data leggibile $row['display_dateschedule'] = strtr($row['display_dateschedule'], $italianMonths); // Assicura maxcapacity positivo (fallback) if ((int) $row['maxcapacity'] <= 0) { $row['maxcapacity'] = 1; } $classes[] = $row; } jsonOut(['classes' => $classes]); } catch (Throwable $ex) { error_log('get_available_classes error: ' . $ex->getMessage()); jsonOut(['error' => 'Errore durante il recupero delle lezioni.']); }