using System.Globalization;

namespace Predictalytics.Hosting;

/// <summary>
/// Laufzeitvorgaben, die vor allem anderen gelten muessen — unabhaengig davon,
/// ob die Anwendung mit Oberflaeche oder headless startet.
/// </summary>
public static class RuntimeSetup
{
    /// <summary>
    /// Legt die invariante Kultur fuer alle Threads fest.
    /// <para>
    /// Die Anwendung verarbeitet ausschliesslich Maschinendaten: Preise, Groessen und
    /// Zeitstempel der Plattform-APIs sowie SQL. Wuerde die Systemlocale durchschlagen,
    /// haette derselbe Datensatz auf einem deutschen und einem englischen System
    /// unterschiedliche Werte — unter Linux faellt das besonders leicht auf, weil dort
    /// die Locale ueblicherweise ausdruecklich gesetzt wird.
    /// </para>
    /// <para>
    /// Bewusst nicht ueber <c>InvariantGlobalization</c> im Projekt: das aendert
    /// zusaetzlich die Semantik von Zeichenkettenvergleichen und waere ein groesserer
    /// Eingriff als noetig.
    /// </para>
    /// </summary>
    public static void UseInvariantCulture()
    {
        CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
        CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.InvariantCulture;
        CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
        CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture;
    }
}
