<?php

use App\Models\Operator;
use App\Models\User;

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option defines the default authentication "guard" and password
    | reset "broker" for your application. You may change these values
    | as required, but they're a perfect start for most applications.
    |
    */

    'defaults' => [
        'guard' => env('AUTH_GUARD', 'web'),
        'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | which utilizes session storage plus the Eloquent user provider.
    |
    | All authentication guards have a user provider, which defines how the
    | users are actually retrieved out of your database or other storage
    | system used by the application. Typically, Eloquent is utilized.
    |
    | Supported: "session"
    |
    */

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        // The console. Its own session cookie name is set in config/session.php
        // is NOT enough — Laravel keeps one session per request, and both guards
        // read from it under different keys, so a portal login and a console
        // login coexist in one browser without overwriting each other.
        'operator' => [
            'driver' => 'session',
            'provider' => 'operators',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication guards have a user provider, which defines how the
    | users are actually retrieved out of your database or other storage
    | system used by the application. Typically, Eloquent is utilized.
    |
    | If you have multiple user tables or models you may configure multiple
    | providers to represent the model / table. These providers may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => env('AUTH_MODEL', User::class),
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],

        'operators' => [
            'driver' => 'eloquent',
            'model' => Operator::class,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | These configuration options specify the behavior of Laravel's password
    | reset functionality, including the table utilized for token storage
    | and the user provider that is invoked to actually retrieve users.
    |
    | The expiry time is the number of minutes that each reset token will be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    | The throttle setting is the number of seconds a user must wait before
    | generating more password reset tokens. This prevents the user from
    | quickly generating a very large amount of password reset tokens.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
            'expire' => 60,
            'throttle' => 60,
        ],

        // Die Betreiber, mit EIGENER Tabelle (R21).
        //
        // Hier stand `password_reset_tokens` — die Tabelle der Kunden. Ein
        // Token ist nur ein Zeilenschlüssel: teilen sich beide Personengruppen
        // die Tabelle, kann ein Token der einen auf der Seite der anderen
        // eingelöst werden. Dass die Adressen sich heute nicht überschneiden
        // (Admin\Settings weist eine Kundenadresse ab), ist eine Prüfung an
        // einer Stelle, keine Struktur.
        //
        // `expire` ist hier die Frist des EINLADUNGSLINKS, nicht die einer
        // Selbstbedienungs-Rücksetzung: den Weg gibt es für Betreiber (noch)
        // nicht, dieser Broker stellt heute ausschliesslich Einladungen aus.
        // 4320 Minuten sind 72 Stunden und decken ein Wochenende ab — am
        // Freitagnachmittag verschickt, am Montagfrüh noch brauchbar. Kürzer,
        // und jede Einladung vor einem freien Tag ist beim Öffnen schon tot;
        // deutlich länger, und ein altes Postfach hält auf Dauer einen
        // Schlüssel zur Betreiberkonsole, die die ganze Flotte verwaltet.
        //
        // Kommt später eine Seite „Passwort vergessen" für Betreiber dazu,
        // gehört ihr eine kürzere Frist — dann braucht sie einen eigenen
        // Broker über derselben Tabelle, statt diese Zahl zu verbiegen.
        //
        // Kein `throttle` hier: der einzige Leser dieses Werts ist
        // sendResetLink() (DatabaseTokenRepository::recentlyCreatedToken()),
        // und dieser Broker stellt Token ausschliesslich über createToken()
        // aus — inviteStaff() und resendInvitation() in Admin\Settings.
        // sendResetLink() würde ohnehin an Operator::sendPasswordResetNotification()
        // scheitern, das absichtlich wirft (R21: kein Selbstbedienungs-Weg für
        // Betreiber). Fehlt der Schlüssel, liest PasswordBrokerManager 0 —
        // ohne Wirkung, weil der Pfad, der ihn braucht, nie läuft.
        'operators' => [
            'provider' => 'operators',
            'table' => 'operator_password_reset_tokens',
            'expire' => 4320,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Password Confirmation Timeout
    |--------------------------------------------------------------------------
    |
    | Here you may define the number of seconds before a password confirmation
    | window expires and users are asked to re-enter their password via the
    | confirmation screen. By default, the timeout lasts for three hours.
    |
    */

    'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),

];
