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.']);
}