<?php
require_once __DIR__ . '/includes/functions.php';

$activiteiten = db()->query(
    "SELECT * FROM activiteiten
     WHERE status = 'gepland' AND datum >= CURDATE()
     ORDER BY datum ASC, begin_tijd ASC"
)->fetchAll();

function icalEsc(string $s): string {
    return addcslashes(preg_replace('/\r\n|\r|\n/', '\\n', $s), ',;\\');
}
function icalDt(string $datum, string $tijd): string {
    return date('Ymd\THis', strtotime("$datum $tijd"));
}

header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename="' . APP_NAME . '-activiteiten.ics"');

echo "BEGIN:VCALENDAR\r\n";
echo "VERSION:2.0\r\n";
echo "PRODID:-//AutoSchadeVrij//" . APP_NAME . "//NL\r\n";
echo "CALSCALE:GREGORIAN\r\n";
echo "METHOD:PUBLISH\r\n";
echo "X-WR-CALNAME:" . icalEsc(APP_NAME . " Activiteiten") . "\r\n";
echo "X-WR-CALDESC:" . icalEsc("Activiteiten van " . APP_NAME) . "\r\n";
echo "X-WR-TIMEZONE:Europe/Amsterdam\r\n";

foreach ($activiteiten as $a) {
    $typeInfo = activiteitTypeInfo($a['type'] ?? 'bijeenkomst');
    $dtStart  = icalDt($a['datum'], $a['begin_tijd']);
    $dtEnd    = $a['eind_tijd'] ? icalDt($a['datum'], $a['eind_tijd']) : icalDt($a['datum'], date('H:i', strtotime($a['begin_tijd']) + 3600));
    $url      = APP_URL . '/activiteiten.php?id=' . $a['id'];

    echo "BEGIN:VEVENT\r\n";
    echo "UID:" . $a['id'] . "@" . parse_url(APP_URL, PHP_URL_HOST) . "\r\n";
    echo "DTSTAMP:" . date('Ymd\THis\Z') . "\r\n";
    echo "DTSTART;TZID=Europe/Amsterdam:" . $dtStart . "\r\n";
    echo "DTEND;TZID=Europe/Amsterdam:"   . $dtEnd   . "\r\n";
    echo "SUMMARY:" . icalEsc('[' . $typeInfo['label'] . '] ' . $a['titel']) . "\r\n";
    if ($a['beschrijving']) {
        echo "DESCRIPTION:" . icalEsc($a['beschrijving']) . "\r\n";
    }
    if ($a['locatie']) {
        echo "LOCATION:" . icalEsc($a['locatie']) . "\r\n";
    }
    echo "URL:" . $url . "\r\n";
    echo "CATEGORIES:" . icalEsc($typeInfo['label']) . "\r\n";
    echo "END:VEVENT\r\n";
}

echo "END:VCALENDAR\r\n";
