<?php

namespace App\Support;

use App\Services\Secrets\SecretVault;

/**
 * Der Signaturschlüssel des aktiven Betriebsmodus.
 *
 * Liegt im Tresor, mit den zwei Plätzen, die der Tresor für Test und Live
 * ohnehin führt — und fällt auf die `.env` zurück, je Modus auf die eigene
 * Zeile (STRIPE_WEBHOOK_SECRET_TEST bzw. STRIPE_WEBHOOK_SECRET), damit eine
 * bestehende Installation sich durch den Umzug nicht ändert.
 *
 * Vorher standen beide Werte AUSSCHLIESSLICH in der Serverdatei, begründet
 * damit, dass dieser Wert bei jedem eingehenden Zahlungsereignis gelesen wird
 * und ein Datenbankproblem die Signaturprüfung still fehlschlagen ließe. Diese
 * Begründung hat nicht gehalten: `stripe.secret` — der Schlüssel, mit dem das
 * Geld eingezogen wird — liegt seit jeher in derselben Tabelle und wird bei
 * jeder Buchung gelesen, und die AUSWAHL hier fragte die Datenbank sowieso
 * schon. Bezahlt hat es der Betreiber: ein Wert in der Konsole, zwei in einer
 * Datei, und eine Bereitschaftsprüfung, die das als blockierend meldete.
 *
 * Die Richtung des Ausfalls bleibt die sichere: `Settings::get()` liefert bei
 * unerreichbarer Tabelle seinen Vorgabewert `live`, also wird der
 * Live-Schlüssel benutzt. Ein echtes Zahlungsereignis wird weiter korrekt
 * geprüft, ein Testereignis scheitert laut. Andersherum wäre es die gefährliche
 * Richtung.
 *
 * Eigene Klasse statt einer privaten Methode auf dem Controller: die Auswahl
 * selbst ist der Prüfgegenstand (siehe StripeWebhookSecretByModeTest), und ein
 * Test soll dafür nicht per Reflection ins Controller-Innere greifen müssen.
 */
final class StripeWebhookSecret
{
    public static function current(): string
    {
        return (string) app(SecretVault::class)->get('stripe.webhook_secret');
    }
}
