using BCrypt.Net;
using MySql.Data.MySqlClient;
using PdfSharp.Fonts;
using System.Globalization;
using System.Reflection;
using System.Windows;
using static SkyTeam.BuchungenPage;

namespace SkyTeam
{
    public partial class App : Application
    {
        // Beim Start der Anwendung einen Standard Admin-Benutzer erstellen, falls keiner existiert , selbGedacht.
        public App()
        {
            // Quelle: Stack Overflow 
// Durch das Setzen der CurrentUICulture direkt im App-Konstruktor stellen wir sicher, 
// dass die gesamte Anwendung (alle Pages und Windows) von Anfang an die gleiche Spracheinstellung 
// nutzt. Das verhindert Inkonsistenzen beim Laden der ersten Seite.
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");
            GlobalFontSettings.FontResolver = new CustomFontResolver();
        }

        private void CreateDefaultAdmin()
        {
            string connectionString = DatenbankServices.GetConnection(); 

            try
            {
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                     // Quelle: Stack Overflow 
 // Dieses Architektur-Muster nennt sich "Database Seeding". Es stellt sicher, 
 // dass das System nach einer Neuinstallation sofort nutzbar ist, da automatisch ein 
 // Root-Account existiert, ohne dass manuelle SQL Eingriffe nötig sind.

                    string checkQuery = "SELECT COUNT(*) FROM users WHERE Rolle = 'Admin'";
                    MySqlCommand checkCmd = new MySqlCommand(checkQuery, conn);
                    long count = (long)checkCmd.ExecuteScalar();

                    if (count == 0)
                    {
                        string hashedPassword = BCrypt.Net.BCrypt.HashPassword("admin");

                        string insertQuery = @"
                            INSERT INTO users (Vorname, Nachname, Email, PasswortHash, Rolle, Stadt, CreatedAt) 
                            VALUES ('System', 'Root', 'admin@skyteam.com', @hash, 'Admin', 'HQ', NOW())";

                        MySqlCommand insertCmd = new MySqlCommand(insertQuery, conn);
                        insertCmd.Parameters.AddWithValue("@hash", hashedPassword);
                        insertCmd.ExecuteNonQuery();

                        MessageBox.Show("Ein Standard-Admin wurde erstellt!\nEmail: admin@skyteam.com\nPasswort: admin");
                    }
                }
            }
            catch(Exception ex) { 
            
            MessageBox.Show("Fehler beim Erstellen des Standard Admins: " + ex.Message);
            }
        }
    }
}