@extends('layouts.app')

@section('page_title', 'Kaffeeliste SaaS - Zentrale Anmeldung')

@php
    $preview = $loginPreview ?? [
        'single' => [
            'email' => 'mia@berlin.example',
            'message' => 'Direkte Weiterleitung in den zugeordneten Tenant.',
            'matches' => [['name' => 'Werk Berlin', 'domain' => 'berlin.kaffeeliste.de', 'login_mode' => 'oidc-first']],
        ],
        'multiple' => [
            'email' => 'leitung@kaffeeliste.example',
            'message' => 'Tenant-Auswahl vor Passwort oder SSO.',
            'matches' => [
                ['name' => 'Werk Berlin', 'domain' => 'berlin.kaffeeliste.de', 'login_mode' => 'oidc-first'],
                ['name' => 'Werk Koeln', 'domain' => 'koeln.kaffeeliste.de', 'login_mode' => 'oidc-first'],
                ['name' => 'Shared Services', 'domain' => 'shared.kaffeeliste.de', 'login_mode' => 'central-routing'],
            ],
        ],
        'unknown' => [
            'email' => 'extern@example.org',
            'message' => 'Rueckfuehrung auf Tenant-Admin oder Einladungspfad.',
            'matches' => [],
        ],
    ];
    $identityPolicy = $identityPolicy ?? [
        'local_login_required' => true,
        'external_login_mode' => 'ADFS/OIDC',
        'supported_modes' => ['password', 'adfs_oidc'],
        'email_mapping' => 'E-Mail-Mapping als primaerer Abgleich zwischen externer Identitaet und internem Benutzer',
        'fallback' => 'Bei Dubletten oder unklaren Zuordnungen wird ein Admin-Klaerfall erzeugt.',
        'recovery' => 'Lokale Anmeldung bleibt immer verfuegbar, auch wenn externe Provider ausfallen.',
        'clarification' => 'Der Erstlogin soll bestehende Konten wiederverwenden und nicht stillschweigend neue Duplikate anlegen.',
        'admin_clarification' => [
            'title' => 'Admin-Klaerfall',
            'description' => 'Wenn eine E-Mail-Adresse nicht eindeutig zugeordnet werden kann, wird der Fall an die zuständigen Admins eskaliert.',
            'steps' => ['Identitaet pruefen', 'Tenant zuordnen', 'Konto bestaetigen oder neu anlegen'],
        ],
    ];
    $roleMatrix = $roleMatrix ?? [
        'roles' => [
            ['key' => 'platform_admin', 'summary' => 'Globaler Zugriff auf Plattform, Tenants und Betriebssteuerung.'],
            ['key' => 'tenant_admin', 'summary' => 'Vollzugriff im eigenen Tenant inklusive Rollen- und Inhaltsverwaltung.'],
            ['key' => 'finance_admin', 'summary' => 'Operative Buchungsrolle fuer Einzahlungen, Storno und Finanzreports.'],
            ['key' => 'support_contact', 'summary' => 'Bearbeitung und Abschluss von Supportvorgaengen.'],
            ['key' => 'survey_manager', 'summary' => 'Pflege, Freigabe und Auswertung von Surveys.'],
            ['key' => 'member', 'summary' => 'Mitglied mit Zugriff auf eigenes Profil und freigegebene Inhalte.'],
        ],
        'rules' => [
            'Tenant-Admin hat Vollzugriff im eigenen Tenant.',
            'Spezialrollen erhalten nur die fuer ihr Modul noetigen Rechte.',
            'Einzahlungen duerfen nur von Verantwortlichen storniert werden.',
            'Stricheintraege duerfen nur von Verantwortlichen geloescht werden.',
        ],
    ];
    $providers = $providers ?? [
        'password' => [
            'label' => 'Lokale Systemanmeldung',
            'type' => 'password',
            'required' => true,
            'description' => 'Pflichtweg fuer lokale Konten und Fallback bei externen Ausfaellen.',
        ],
        'adfs_oidc' => [
            'label' => 'ADFS / OIDC',
            'type' => 'oidc',
            'required' => false,
            'description' => 'Zusatzoption fuer angebundene Identitaetsprovider.',
        ],
    ];
    $oidcProviders = $oidcProviders ?? [
        [
            'provider_key' => 'adfs-oidc-default',
            'driver' => 'oidc',
            'client_id' => 'tenant-client-id',
            'redirect_uri' => '/auth/oidc/adfs-oidc-default/callback',
            'scopes' => ['openid', 'profile', 'email'],
        ],
    ];
@endphp

@section('content')
    <section class="hero hero--split">
        <div class="hero__content">
            <div>
                <p class="hero__kicker">Mitglieder-Login</p>
                <h2 class="hero__title">Eine zentrale Anmeldung, die Mitglieder automatisch in den richtigen Tenant bringt.</h2>
                <p class="hero__lead">
                    Statt verschiedene Tenant-URLs zu kennen, starten Mitglieder zentral mit ihrer E-Mail-Adresse. Die Plattform
                    erkennt Einzel- oder Mehrfachzuordnungen und fuehrt danach passend weiter: direkt in den Tenant, in eine
                    Tenant-Auswahl oder in einen klaren Kontaktpfad.
                </p>
            </div>
            <div class="hero__actions">
                <a class="button" href="#mitglied-login">Mitglieder-Login starten</a>
                <a class="button button--ghost" href="/tenants">Admin Console ansehen</a>
            </div>
            <div class="hero__meta">
                <span class="badge">E-Mail first</span>
                <span class="badge">Tenant-Erkennung</span>
                <span class="badge">Lokaler Login Pflicht</span>
                <span class="badge">ADFS/OIDC zusaetzlich</span>
                <span class="badge badge--solid">Mehrfachzuordnung unterstuetzt</span>
            </div>
        </div>

        <aside class="hero__aside">
            <article class="card metric metric--compact">
                <p class="metric__label">Ein Tenant erkannt</p>
                <div class="metric__value">1 Klick</div>
                <p class="muted">Bei genau einer Mitgliedschaft wird direkt in den passenden Tenant weitergeleitet.</p>
            </article>
            <article class="card metric metric--compact">
                <p class="metric__label">Mehrfachzuordnung</p>
                <div class="metric__value">{{ count($preview['multiple']['matches']) }} Tenants</div>
                <p class="muted">Die Auswahl erscheint nur dann, wenn fuer dieselbe Mail-Adresse mehrere Kontexte hinterlegt sind.</p>
            </article>
            <div class="callout">
                <strong>SSO und Passwort aus einem Einstieg</strong>
                Die zentrale Anmeldung entscheidet zuerst ueber den Tenant-Kontext. Danach folgen Passwort-Login, OIDC oder ein
                klarer Fallback fuer kleinere Tenants.
            </div>
        </aside>
    </section>

    <section id="mitglied-login" class="split">
        <article class="form-panel">
            <p class="card__eyebrow">Zentraler Einstieg</p>
            <h3>Mit E-Mail und Passwort anmelden</h3>
            <p class="muted">
                Die E-Mail-Adresse steuert zuerst die Tenant-Erkennung. Der Passwort- oder SSO-Schritt kommt danach im richtigen Kontext.
            </p>
            <form class="form-grid" method="post" action="/login" style="margin-top: 18px;">
                <div class="field">
                    <label for="email">E-Mail-Adresse</label>
                    <input id="email" name="email" type="email" autocomplete="username" placeholder="mitglied@unternehmen.de">
                </div>
                <div class="field">
                    <label for="password">Passwort</label>
                    <input id="password" name="password" type="password" autocomplete="current-password" placeholder="••••••••">
                </div>
                <div class="toolbar">
                    <button type="submit">Zentral anmelden</button>
                    <a class="button button--ghost" href="/forgot-password">Passwort vergessen?</a>
                </div>
            </form>
            <div class="note" style="margin-top: 18px;">
                Zielbild: Eine zentrale Anmeldung fuer Mitglieder, ohne dass zuerst Tenant-Keys oder Subdomains bekannt sein muessen.
            </div>
        </article>

        <article class="panel">
            <p class="card__eyebrow">Was danach passiert</p>
            <h3>Automatische Weiterleitung oder Tenant-Auswahl.</h3>
            <div class="timeline timeline--tight" style="margin-top: 18px;">
                <div class="timeline__item">
                    <p class="timeline__title">Genau ein Treffer</p>
                    <p class="timeline__meta">Die Plattform leitet direkt in den Tenant weiter und zeigt dort Passwort- oder SSO-Login an.</p>
                </div>
                <div class="timeline__item">
                    <p class="timeline__title">Mehrere Treffer</p>
                    <p class="timeline__meta">Vor dem eigentlichen Login erscheint eine Tenant-Auswahl mit Namen, Domain und Login-Modell.</p>
                </div>
                <div class="timeline__item">
                    <p class="timeline__title">Kein Treffer</p>
                    <p class="timeline__meta">Statt Sackgasse gibt es einen klaren Rueckweg zu Tenant-Admin, Einladung oder Support.</p>
                </div>
            </div>
            <div class="stack" style="margin-top:18px;">
                @foreach ($providers as $providerKey => $provider)
                    <div class="feature-list__item" style="align-items:flex-start;">
                        <div class="feature-list__badge">{{ strtoupper(substr((string) $providerKey, 0, 1)) }}</div>
                        <div>
                            <p class="feature-list__title">{{ $provider['label'] ?? $providerKey }}</p>
                            <p class="feature-list__copy muted">{{ $provider['description'] ?? '' }}</p>
                        </div>
                        <span class="status {{ !empty($provider['required']) ? 'status--warning' : 'status--neutral' }}">
                            {{ !empty($provider['required']) ? 'Pflicht' : 'Optional' }}
                        </span>
                    </div>
                @endforeach
            </div>
            <div class="callout" style="margin-top:18px;">
                <strong>{{ $identityPolicy['admin_clarification']['title'] ?? 'Admin-Klaerfall' }}</strong>
                <p class="muted" style="margin-top:8px;">{{ $identityPolicy['admin_clarification']['description'] ?? $identityPolicy['fallback'] ?? '' }}</p>
                <ul class="list-reset" style="margin-top:12px;">
                    @foreach (($identityPolicy['admin_clarification']['steps'] ?? []) as $step)
                        <li style="margin-bottom:8px;">- {{ $step }}</li>
                    @endforeach
                </ul>
            </div>
        </article>
    </section>

    <section class="grid grid--3" style="margin-top: 18px;">
        <article class="card">
            <p class="card__eyebrow">Preview: Einzelzuordnung</p>
            <h3>{{ $preview['single']['email'] }}</h3>
            <p class="muted">{{ $preview['single']['message'] }}</p>
            <div class="tenant-grid" style="margin-top: 18px;">
                @foreach ($preview['single']['matches'] as $tenant)
                    <div class="tenant-row">
                        <div class="tenant-row__meta">
                            <p class="tenant-row__title">{{ $tenant['name'] }}</p>
                            <p class="tenant-row__copy">{{ $tenant['domain'] }}</p>
                        </div>
                        <span class="status">Auto-Weiterleitung</span>
                    </div>
                @endforeach
            </div>
        </article>

        <article class="card">
            <p class="card__eyebrow">Preview: Mehrfachzuordnung</p>
            <h3>{{ $preview['multiple']['email'] }}</h3>
            <p class="muted">{{ $preview['multiple']['message'] }}</p>
            <div class="tenant-grid" style="margin-top: 18px;">
                @foreach ($preview['multiple']['matches'] as $tenant)
                    <div class="tenant-row">
                        <div class="tenant-row__meta">
                            <p class="tenant-row__title">{{ $tenant['name'] }}</p>
                            <p class="tenant-row__copy">{{ $tenant['domain'] }} - {{ $tenant['login_mode'] }}</p>
                        </div>
                        <span class="status status--warning">Auswahl</span>
                    </div>
                @endforeach
            </div>
        </article>

        <article class="card">
            <p class="card__eyebrow">Preview: Unbekannte Mail</p>
            <h3>{{ $preview['unknown']['email'] }}</h3>
            <p class="muted">{{ $preview['unknown']['message'] }}</p>
            <div class="callout" style="margin-top: 18px;">
                <strong>Keine Sackgasse fuer Mitglieder</strong>
                Die Anwendung kann stattdessen Tenant-Kontakt, Einladung oder den zentralen Supportpfad anzeigen.
            </div>
        </article>
    </section>

    <section class="grid grid--2" style="margin-top: 18px;">
        <article class="panel">
            <p class="card__eyebrow">Identity-Policy</p>
            <h3>Lokale Anmeldung plus ADFS/OIDC</h3>
            <div class="timeline timeline--tight" style="margin-top: 18px;">
                <div class="timeline__item">
                    <p class="timeline__title">Pflicht</p>
                    <p class="timeline__meta">{{ $identityPolicy['local_login_required'] ? 'Lokale Anmeldung bleibt immer verfuegbar.' : 'Lokale Anmeldung ist optional.' }}</p>
                </div>
                <div class="timeline__item">
                    <p class="timeline__title">Zusaetzliche Option</p>
                    <p class="timeline__meta">{{ $identityPolicy['external_login_mode'] ?? 'ADFS/OIDC' }}</p>
                </div>
                <div class="timeline__item">
                    <p class="timeline__title">Abgleich</p>
                    <p class="timeline__meta">{{ $identityPolicy['email_mapping'] ?? '' }}</p>
                </div>
                <div class="timeline__item">
                    <p class="timeline__title">Klärfall</p>
                    <p class="timeline__meta">{{ $identityPolicy['fallback'] ?? '' }}</p>
                </div>
                <div class="timeline__item">
                    <p class="timeline__title">Admin-Klaerfall</p>
                    <p class="timeline__meta">{{ $identityPolicy['admin_clarification']['description'] ?? '' }}</p>
                </div>
            </div>
        </article>

        <article class="panel">
            <p class="card__eyebrow">Rollenmodell</p>
            <h3>Vorgeschlagene Rechtebasis</h3>
            <div class="stack" style="margin-top: 18px;">
                @foreach ($roleMatrix['roles'] ?? [] as $role)
                    <div class="feature-list__item">
                        <div class="feature-list__badge">{{ strtoupper(substr((string) ($role['key'] ?? ''), 0, 1)) }}</div>
                        <div>
                            <p class="feature-list__title">{{ $role['key'] ?? '' }}</p>
                            <p class="feature-list__copy muted">{{ $role['summary'] ?? '' }}</p>
                        </div>
                    </div>
                @endforeach
            </div>
        </article>
    </section>

    <section class="grid grid--2" style="margin-top: 18px;">
        <article class="panel">
            <p class="card__eyebrow">Provider-Details</p>
            <h3>Konfigurierte ADFS/OIDC-Verbindungen</h3>
            <div class="stack" style="margin-top: 18px;">
                @foreach ($oidcProviders as $provider)
                    <div class="timeline__item">
                        <p class="timeline__title">{{ $provider['provider_key'] ?? 'provider' }}</p>
                        <p class="timeline__meta">Driver: {{ $provider['driver'] ?? 'oidc' }} | Client-ID: {{ $provider['client_id'] ?? '-' }}</p>
                        <p class="timeline__meta">Redirect: {{ $provider['redirect_uri'] ?? '-' }}</p>
                        <p class="timeline__meta">Scopes: {{ implode(', ', $provider['scopes'] ?? []) }}</p>
                    </div>
                @endforeach
            </div>
        </article>

        <article class="panel">
            <p class="card__eyebrow">Mindestregel</p>
            <h3>Lokale Anmeldung bleibt immer verfuegbar.</h3>
            <div class="callout" style="margin-top: 18px;">
                Selbst wenn ein externer Provider ausfaellt, bleibt der lokale Weg aktiv. So kann der Tenant weiterarbeiten und der Admin-Klaerfall bleibt handhabbar.
            </div>
        </article>
    </section>

    <section class="panel" style="margin-top: 18px;">
        <h3>Regeln fuer Rollen und Abgrenzung</h3>
        <ul class="list-reset">
            @foreach ($roleMatrix['rules'] ?? [] as $rule)
                <li style="margin-bottom: 12px;">
                    <span class="status">Regel</span> {{ $rule }}
                </li>
            @endforeach
        </ul>
    </section>
@endsection
