{% extends "tesm_core/base.html" %}
{% from "tesm_core/macros.html" import empty_state, alert, search_box %}

{% block page_title %}Aktive Sitzungen{% endblock %}
{% block page_sub %}{{ sessions | length }} laufende Sitzungen &middot; serverseitig gespeichert und jederzeit widerrufbar{% endblock %}

{% block topbar_extra %}{{ search_box('sessions-table', 'Benutzer oder IP ...') }}{% endblock %}

{% block content %}
{{ alert('Sitzungen liegen in der Datenbank, nicht im Cookie. Ein widerrufener Eintrag ist sofort
ungueltig -- auch wenn das Cookie noch existiert.', 'info') }}

<section class="card">
  <div class="table-wrap">
    <table class="table" id="sessions-table" data-behavior="sortable">
      <thead>
        <tr>
          <th class="sortable">Benutzer</th>
          <th class="sortable">Angemeldet</th>
          <th class="sortable">Letzte Aktivitaet</th>
          <th class="sortable">Laeuft ab</th>
          <th class="sortable">IP</th>
          <th>Client</th>
          <th class="actions">Aktion</th>
        </tr>
      </thead>
      <tbody>
        {% for entry in sessions %}
          <tr data-filter-text="{{ entry.username }} {{ entry.ip }} {{ entry.user_agent }}">
            <td class="fw-600">{{ entry.username or 'anonym' }}</td>
            <td class="fs-sm" data-sort-value="{{ entry.created_at }}">{{ entry.created_at | dt }}</td>
            <td class="fs-sm" data-sort-value="{{ entry.last_seen_at }}">
              <span data-relative-time="{{ entry.last_seen_at }}">{{ entry.last_seen_at | dt }}</span>
            </td>
            <td class="fs-sm" data-sort-value="{{ entry.absolute_expires_at }}">{{ entry.absolute_expires_at | dt }}</td>
            <td class="mono fs-sm">{{ entry.ip or '&ndash;' | safe }}</td>
            <td class="fs-xs faint truncate" style="max-width:260px" title="{{ entry.user_agent }}">
              {{ entry.user_agent or '&ndash;' | safe }}
            </td>
            <td class="actions">
              <form method="post" action="{{ url_for('admin.session_revoke', sid=entry.id) }}" data-no-guard>
                <input type="hidden" name="{{ csrf_field_name }}" value="{{ csrf_token() }}">
                <button class="btn btn--sm btn--ghost danger-text" type="submit"
                        data-confirm="Sitzung von {{ entry.username or 'anonym' }} beenden?"
                        data-confirm-title="Sitzung beenden" data-confirm-ok="Beenden">Beenden</button>
              </form>
            </td>
          </tr>
        {% endfor %}
      </tbody>
    </table>
  </div>
  {% if not sessions %}{{ empty_state('Keine aktiven Sitzungen', '', 'activity') }}{% endif %}
</section>
{% endblock %}
