<?php
require_once __DIR__ . '/app/bootstrap.php';

$available = lantern_events_available($conn);
$month = lantern_event_month_from_query((string) ($_GET['month'] ?? date('Y-m')));
$message = '';
$messageType = 'success';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['event_rsvp'])) {
    if (!isLoggedIn()) {
        redirect('login.php');
    }

    $eventId = (int) ($_POST['event_id'] ?? 0);
    $response = (string) ($_POST['response'] ?? '');
    $event = lantern_fetch_event($conn, $eventId);
    $currentResponse = lantern_fetch_user_event_response($conn, $eventId, (int) $_SESSION['user_id']);

    if (!lantern_event_csrf_valid((string) ($_POST['csrf_token'] ?? ''))) {
        $message = 'Formuläret hann gå ut. Ladda om sidan och försök igen.';
        $messageType = 'error';
    } elseif (!$event || $event['status'] !== 'published') {
        $message = 'Eventet går inte längre att anmäla sig till.';
        $messageType = 'error';
    } elseif ($response === 'going' && $currentResponse !== 'going' && !empty($event['capacity']) && (int) $event['going_count'] >= (int) $event['capacity']) {
        $message = 'Eventet är fullt, men du kan fortfarande välja Kanske.';
        $messageType = 'error';
    } elseif (lantern_set_event_response($conn, $eventId, (int) $_SESSION['user_id'], $response)) {
        $message = 'Ditt svar har sparats.';
    } else {
        $message = 'Ditt svar kunde inte sparas.';
        $messageType = 'error';
    }
}

$monthEvents = $available ? lantern_fetch_month_events($conn, $month) : [];
$upcomingEvents = $available ? lantern_fetch_upcoming_events($conn, 8) : [];
$selectedId = (int) ($_GET['event'] ?? $_POST['event_id'] ?? ($upcomingEvents[0]['id'] ?? 0));
$selectedEvent = $selectedId > 0 ? lantern_fetch_event($conn, $selectedId) : null;
$attendees = $selectedEvent ? lantern_fetch_event_attendees($conn, $selectedId) : [];
$userResponse = $selectedEvent && isLoggedIn()
    ? lantern_fetch_user_event_response($conn, $selectedId, (int) $_SESSION['user_id'])
    : null;

$eventsByDay = [];
foreach ($monthEvents as $event) {
    $eventsByDay[date('Y-m-d', strtotime($event['starts_at']))][] = $event;
}

$monthNames = [1 => 'Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December'];
$calendarStart = $month->modify('first day of this month')->modify('-' . ((int) $month->format('N') - 1) . ' days');
$previousMonth = $month->modify('-1 month')->format('Y-m');
$nextMonth = $month->modify('+1 month')->format('Y-m');
$today = date('Y-m-d');

lantern_render_head('Event & kalender | Lantern', 'Upptäck kommande event och planera din tid tillsammans med Lantern-communityt.');
lantern_render_header('events');
?>
  <main class="content-main events-main">
    <div class="content-stack">
      <section class="page-hero events-hero reveal">
        <div>
          <p class="eyebrow">SAMLAS RUNT ELDEN</p>
          <h1>Event &amp; kalender</h1>
          <p class="page-copy">Byggkvällar, äventyr och communityträffar. Här ser du vad som händer i Lantern och vilka som följer med.</p>
        </div>
        <div class="events-hero-mark" aria-hidden="true">
          <img src="assets/lantern.png" alt="" width="74" height="74">
          <span>Nästa samling</span>
          <strong><?php echo $upcomingEvents ? lantern_escape(lantern_event_date_label($upcomingEvents[0]['starts_at'])) : 'Planeras'; ?></strong>
        </div>
      </section>

      <?php if ($message !== ''): ?>
        <div class="alert <?php echo $messageType === 'success' ? 'alert-success' : 'alert-error'; ?>"><?php echo lantern_escape($message); ?></div>
      <?php endif; ?>

      <?php if (!$available): ?>
        <section class="page-section events-unavailable reveal">
          <p class="eyebrow">KALENDERN FÖRBEREDS</p>
          <h2>Snart tänder vi nästa lykta.</h2>
          <p>Eventsystemets databas behöver aktiveras innan kalendern kan användas.</p>
        </section>
      <?php else: ?>
        <div class="events-layout">
          <section class="page-section event-calendar reveal" aria-label="Eventkalender">
            <div class="calendar-toolbar">
              <div>
                <p class="eyebrow">MÅNADSVY</p>
                <h2><?php echo $monthNames[(int) $month->format('n')] . ' ' . $month->format('Y'); ?></h2>
              </div>
              <nav class="calendar-navigation" aria-label="Byt månad">
                <a href="events.php?month=<?php echo $previousMonth; ?>" aria-label="Föregående månad">&#8249;</a>
                <a class="calendar-today" href="events.php">Idag</a>
                <a href="events.php?month=<?php echo $nextMonth; ?>" aria-label="Nästa månad">&#8250;</a>
              </nav>
            </div>

            <div class="calendar-weekdays" aria-hidden="true">
              <?php foreach (['Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör', 'Sön'] as $weekday): ?><span><?php echo $weekday; ?></span><?php endforeach; ?>
            </div>
            <div class="calendar-grid">
              <?php for ($dayOffset = 0; $dayOffset < 42; $dayOffset++): ?>
                <?php
                  $day = $calendarStart->modify("+{$dayOffset} days");
                  $dayKey = $day->format('Y-m-d');
                  $dayEvents = $eventsByDay[$dayKey] ?? [];
                  $classes = ['calendar-day'];
                  if ($day->format('m') !== $month->format('m')) $classes[] = 'is-outside';
                  if ($dayKey === $today) $classes[] = 'is-today';
                  if ($dayEvents) $classes[] = 'has-events';
                ?>
                <div class="<?php echo implode(' ', $classes); ?>">
                  <span class="calendar-day-number"><?php echo (int) $day->format('j'); ?></span>
                  <div class="calendar-day-events">
                    <?php foreach (array_slice($dayEvents, 0, 2) as $event): ?>
                      <a class="calendar-event category-<?php echo lantern_escape($event['category']); ?> <?php echo $event['status'] === 'cancelled' ? 'is-cancelled' : ''; ?>" href="events.php?month=<?php echo $month->format('Y-m'); ?>&amp;event=<?php echo (int) $event['id']; ?>#event-detail" title="<?php echo lantern_escape($event['title']); ?>">
                        <time><?php echo date('H:i', strtotime($event['starts_at'])); ?></time>
                        <span><?php echo lantern_escape($event['title']); ?></span>
                      </a>
                    <?php endforeach; ?>
                    <?php if (count($dayEvents) > 2): ?><span class="calendar-more">+<?php echo count($dayEvents) - 2; ?> till</span><?php endif; ?>
                  </div>
                </div>
              <?php endfor; ?>
            </div>
          </section>

          <aside class="page-section upcoming-events reveal">
            <div class="upcoming-heading">
              <p class="eyebrow">PÅ GÅNG</p>
              <h2>Kommande</h2>
            </div>
            <?php if ($upcomingEvents === []): ?>
              <div class="upcoming-empty"><img src="assets/lantern.png" alt="" width="44" height="44"><p>Inga event är publicerade ännu.</p></div>
            <?php else: ?>
              <div class="upcoming-list">
                <?php foreach ($upcomingEvents as $event): ?>
                  <a class="upcoming-event category-<?php echo lantern_escape($event['category']); ?> <?php echo (int) $event['id'] === $selectedId ? 'is-selected' : ''; ?> <?php echo $event['status'] === 'cancelled' ? 'is-cancelled' : ''; ?>" href="events.php?month=<?php echo $month->format('Y-m'); ?>&amp;event=<?php echo (int) $event['id']; ?>#event-detail">
                    <time datetime="<?php echo lantern_escape($event['starts_at']); ?>"><strong><?php echo date('d', strtotime($event['starts_at'])); ?></strong><span><?php echo strtoupper($monthNames[(int) date('n', strtotime($event['starts_at']))]); ?></span></time>
                    <span class="upcoming-event-copy">
                      <small><?php echo lantern_escape(lantern_event_category_label($event['category'])); ?> · <?php echo date('H:i', strtotime($event['starts_at'])); ?></small>
                      <strong><?php echo lantern_escape($event['title']); ?></strong>
                      <span><?php echo (int) $event['going_count']; ?> kommer<?php echo !empty($event['capacity']) ? ' av ' . (int) $event['capacity'] : ''; ?></span>
                    </span>
                    <span aria-hidden="true">&rarr;</span>
                  </a>
                <?php endforeach; ?>
              </div>
            <?php endif; ?>
          </aside>
        </div>

        <?php if ($selectedEvent): ?>
          <section class="page-section event-detail category-<?php echo lantern_escape($selectedEvent['category']); ?> reveal" id="event-detail">
            <div class="event-detail-main">
              <div class="event-detail-heading">
                <div>
                  <span class="event-category"><?php echo lantern_escape(lantern_event_category_label($selectedEvent['category'])); ?></span>
                  <?php if ($selectedEvent['status'] === 'cancelled'): ?><span class="event-cancelled-badge">Inställt</span><?php endif; ?>
                  <h2><?php echo lantern_escape($selectedEvent['title']); ?></h2>
                </div>
                <div class="event-date-block">
                  <span><?php echo strtoupper($monthNames[(int) date('n', strtotime($selectedEvent['starts_at']))]); ?></span>
                  <strong><?php echo date('d', strtotime($selectedEvent['starts_at'])); ?></strong>
                </div>
              </div>

              <div class="event-facts">
                <span><small>NÄR</small><?php echo lantern_escape(lantern_event_date_label($selectedEvent['starts_at'], $selectedEvent['ends_at'])); ?></span>
                <span><small>VAR</small><?php echo lantern_escape($selectedEvent['location'] ?: 'På Lantern-servern'); ?></span>
                <span><small>VÄRD</small><?php echo lantern_escape($selectedEvent['creator_mc'] ?: trim(($selectedEvent['creator_first'] ?? '') . ' ' . ($selectedEvent['creator_last'] ?? '')) ?: 'Lantern'); ?></span>
              </div>
              <div class="event-description"><?php echo nl2br(lantern_escape($selectedEvent['description'])); ?></div>

              <div class="event-attendees">
                <div class="event-attendee-heading">
                  <h3><?php echo (int) $selectedEvent['going_count']; ?> kommer</h3>
                  <span><?php echo (int) $selectedEvent['maybe_count']; ?> kanske</span>
                </div>
                <?php $visibleAttendees = array_values(array_filter($attendees, fn ($attendee) => $attendee['response'] !== 'declined')); ?>
                <?php if ($visibleAttendees): ?>
                  <div class="event-attendee-list">
                    <?php foreach ($visibleAttendees as $attendee): ?>
                      <a href="profile.php?id=<?php echo (int) $attendee['id']; ?>" title="<?php echo lantern_escape($attendee['minecraft_name']); ?> · <?php echo $attendee['response'] === 'going' ? 'Kommer' : 'Kanske'; ?>">
                        <img src="https://mc-heads.net/avatar/<?php echo rawurlencode((string) $attendee['minecraft_name']); ?>/48" alt="" width="38" height="38" loading="lazy">
                        <span><?php echo lantern_escape($attendee['minecraft_name']); ?></span>
                      </a>
                    <?php endforeach; ?>
                  </div>
                <?php else: ?>
                  <p class="text-muted">Ingen har anmält sig ännu. Du kan bli först.</p>
                <?php endif; ?>
              </div>
            </div>

            <aside class="event-rsvp-card">
              <span class="event-rsvp-label">DIN PLATS VID ELDEN</span>
              <?php if ($selectedEvent['status'] === 'cancelled'): ?>
                <strong>Eventet är inställt</strong>
                <p>Din tidigare anmälan finns kvar som historik.</p>
              <?php elseif (!isLoggedIn()): ?>
                <strong>Vill du följa med?</strong>
                <p>Logga in för att anmäla dig och se vilka andra som kommer.</p>
                <a class="button button-primary" href="login.php">Logga in</a>
              <?php else: ?>
                <strong><?php echo $userResponse ? 'Ditt svar är sparat' : 'Kommer du?'; ?></strong>
                <p><?php echo !empty($selectedEvent['capacity']) ? (int) $selectedEvent['going_count'] . ' av ' . (int) $selectedEvent['capacity'] . ' platser är bokade.' : 'Du kan ändra ditt svar när du vill.'; ?></p>
                <form method="POST" action="events.php?month=<?php echo $month->format('Y-m'); ?>&amp;event=<?php echo (int) $selectedEvent['id']; ?>#event-detail" class="event-rsvp-options">
                  <input type="hidden" name="csrf_token" value="<?php echo lantern_escape(lantern_event_csrf_token()); ?>">
                  <input type="hidden" name="event_id" value="<?php echo (int) $selectedEvent['id']; ?>">
                  <input type="hidden" name="event_rsvp" value="1">
                  <button type="submit" name="response" value="going" class="<?php echo $userResponse === 'going' ? 'is-active' : ''; ?>">Kommer</button>
                </form>
                <div class="event-rsvp-secondary">
                  <?php foreach (['maybe' => 'Kanske', 'declined' => 'Kan inte'] as $responseValue => $responseLabel): ?>
                    <form method="POST" action="events.php?month=<?php echo $month->format('Y-m'); ?>&amp;event=<?php echo (int) $selectedEvent['id']; ?>#event-detail">
                      <input type="hidden" name="csrf_token" value="<?php echo lantern_escape(lantern_event_csrf_token()); ?>">
                      <input type="hidden" name="event_id" value="<?php echo (int) $selectedEvent['id']; ?>">
                      <input type="hidden" name="event_rsvp" value="1">
                      <button type="submit" name="response" value="<?php echo $responseValue; ?>" class="<?php echo $userResponse === $responseValue ? 'is-active' : ''; ?>"><?php echo $responseLabel; ?></button>
                    </form>
                  <?php endforeach; ?>
                </div>
              <?php endif; ?>
            </aside>
          </section>
        <?php endif; ?>
      <?php endif; ?>
    </div>
  </main>
<?php lantern_render_footer(); ?>
