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

{% block page_title %}Netzwerkeinstellungen{% endblock %}
{% block page_sub %}Backend: {{ backend }} &middot; Sicherheitsnetz {{ revert_seconds }} s{% endblock %}

{% block content %}
{{ alert('Nach einer Aenderung laeuft ein Zeitgeber. Bestaetigen Sie nicht innerhalb von
' ~ revert_seconds ~ ' Sekunden von der neuen Adresse aus, wird automatisch
zurueckgerollt. So sperrt eine falsche Eingabe den Host nicht aus.', 'warning',
'Automatischer Rueckfall') }}

{% if pending %}
  <section class="card card--danger">
    <div class="card__header">
      <div class="flex-1">
        <div class="card__title">{{ icon('alert', size=17) }} Aenderung wartet auf Bestaetigung</div>
        <div class="card__sub">Interface {{ pending.interface }}</div>
      </div>
    </div>
    <div class="card__body">
      <form method="post" action="{{ url_for('hostsettings.network_confirm') }}" data-no-guard>
        <input type="hidden" name="{{ csrf_field_name }}" value="{{ csrf_token() }}">
        <button class="btn btn--primary" type="submit">Verbindung bestaetigen</button>
      </form>
    </div>
  </section>
{% endif %}

{% if not sysops_available %}
  {{ alert('Systemhelfer nicht verfuegbar -- die Anzeige ist rein lesend.', 'info') }}
{% endif %}

<section class="card">
  <div class="card__header">
    <div class="flex-1"><div class="card__title">{{ icon('network', size=17) }} Interfaces</div></div>
  </div>
  {% if interfaces %}
    <div class="table-wrap">
      <table class="table table--compact">
        <thead><tr><th>Name</th><th>Zustand</th><th>Adressen</th><th>Gateway</th><th>DNS</th><th>MAC</th></tr></thead>
        <tbody>
          {% for entry in interfaces %}
            <tr>
              <td class="fw-600 mono">{{ entry.name }}</td>
              <td>{% if entry.state == 'UP' %}{{ pill('UP', 'online') }}{% else %}{{ pill(entry.state, '') }}{% endif %}</td>
              <td class="mono fs-sm">{{ entry.addresses | join(', ') or '&ndash;' | safe }}</td>
              <td class="mono fs-sm">{{ entry.gateway or '&ndash;' | safe }}</td>
              <td class="mono fs-sm">{{ entry.dns | join(', ') or '&ndash;' | safe }}</td>
              <td class="mono fs-xs faint">{{ entry.mac }}</td>
            </tr>
          {% endfor %}
        </tbody>
      </table>
    </div>
  {% else %}
    {{ empty_state('Keine Interfaces gelesen', 'Das System gibt hier nichts zurueck.', 'network') }}
  {% endif %}
</section>

{% if current_user.has('settings_network.edit') and interfaces %}
  <section class="card">
    <div class="card__header">
      <div class="flex-1">
        <div class="card__title">{{ icon('sliders', size=17) }} Aendern</div>
        <div class="card__sub">
          Es wird nur der Block des gewaehlten Interfaces geschrieben (Datei
          <span class="mono">{{ netplan_path }}</span>) &ndash; andere Interfaces bleiben
          unberuehrt.
        </div>
      </div>
    </div>
    <form method="post" action="{{ url_for('hostsettings.network_apply') }}">
      <input type="hidden" name="{{ csrf_field_name }}" value="{{ csrf_token() }}">
      <div class="card__body stack">
        <div class="form-grid">
          <label class="field">
            <span class="field__label">Interface</span>
            <select class="select" name="interface" required>
              {% for entry in interfaces %}<option value="{{ entry.name }}">{{ entry.name }}</option>{% endfor %}
            </select>
          </label>
          <label class="field">
            <span class="field__label">Verfahren</span>
            <select class="select" name="mode">
              <option value="dhcp">Adresse per DHCP beziehen</option>
              <option value="static">Feste Adresse</option>
            </select>
          </label>
          {{ field('address', 'IP-Adresse', placeholder='192.168.1.10') }}
          {{ field('prefix', 'Praefixlaenge', value='24', type='number') }}
          {{ field('gateway', 'Gateway', placeholder='192.168.1.1') }}
          {{ field('dns', 'DNS-Server', placeholder='192.168.1.1, 9.9.9.9') }}
        </div>
        {{ alert('Das Gateway muss im angegebenen Netz liegen -- sonst waere der Host nach der
        Aenderung nicht mehr erreichbar. Das wird vor dem Schreiben geprueft.', 'info') }}
      </div>
      <div class="card__footer">
        <button class="btn btn--danger" type="submit"
                data-confirm="Netzwerkeinstellungen jetzt uebernehmen? Die Verbindung kann kurz abbrechen. Ohne Bestaetigung wird nach {{ revert_seconds }} Sekunden zurueckgerollt."
                data-confirm-title="Netzwerk aendern" data-confirm-ok="Uebernehmen">
          Uebernehmen
        </button>
      </div>
    </form>
  </section>
{% endif %}
{% endblock %}
