using MahApps.Metro.Controls;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace ZKuP
{
    /// <summary>
    /// Interaktionslogik für CreateParkausweis.xaml
    /// </summary>
    public partial class CreateParkausweis : MetroWindow
	{
        List<string> plz = new List<string>();
        public bool special { get; private set; }

        List<string> Abteilungen = new List<string>()
        {
                "P.FBW-M",
                "P.FBW-M 1",
                "P.FBW-M 11",
                "P.FBW-M 2",
                "P.FBW-M 21",
                "P.FBW-M 23",
                "P.FBW-M 3",
                "P.FBW-M 313",
                "P.FBW-M 314",
                "P.FBW-M 315",
                "P.FBW-M 32",
                "P.FBW-M 33",
                "P.FBW-M 34",
                "P.FBW-M 341",
                "P.FBW-M 342",
                "P.FBW-M 35",
                "P.FBW-M 4",
                "P.FBW-M 41",
                "P.FBW-M 411",
                "P.FBW-M 43",
                "P.FBW-M 431",
                "P.FBW-M 432",
                "P.FBW-M 433",
                "P.FBW-M 44",
                "P.FBW-M 441",
                "P.FBW-M 443",
                "P.FBW-M 45",
                "P.FBW-M 451",
                "P.FBW-M 453",
                "P.FBW-M 46",
                "P.FBW-M 461",
                "P.FBW-M 465",
                "P.FBW-M 5",
                "P.FBW-M 52",
                "P.FBW-M 6",
                "P.FBW-M 61",
                "P.FBW-M 7",
                "P.FBW-M 73",
                "P.FBW-M 731",
                "P.FBW-M 74",
                "P.FBW-M 742"
        };

        public CreateParkausweis(bool Special = false)
        {
            InitializeComponent();
            special = Special;

            //if(special)
            //{
            //    CommentRow.Height = new GridLength(2, GridUnitType.Star);
            //    MinWidth = 360;
            //    MinHeight = 850;
            //    Width = 360;
            //    Height = 850;
            //}
            //else
            //{
            //    CommentRow.Height = new GridLength(0, GridUnitType.Star);
            //    MinWidth = 330;
            //    MinHeight = 707;
            //    Width = 330;
            //    Height = 707;
            //}

            rbDKennzeichen.Checked += rbDKennzeichen_Checked;

            //var uri = new Uri("pack://application:,,,/Resources/PLZ_MUC.txt");
            //var resourceStream = Application.GetResourceStream(uri);

            //using (var reader = new System.IO.StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("ZKuP.Resources.PLZ_MUC.txt")))
            //{
            //    plz = reader.ReadToEnd().Replace("\r", "").Split('\n').ToList();
            //}
        }

        private void Textboxes_Changed(object sender, TextChangedEventArgs e)
        {
            if (System.Text.RegularExpressions.Regex.IsMatch(tbAdresse.Text, @"^.+\s{1}\d+\s*\w*"))
            {
                tbAdresse.SetResourceReference(Control.ForegroundProperty, SystemColors.ControlTextBrushKey);
                //tbAdresse.Foreground = new SolidColorBrush(Colors.Black); 
            }

            if (System.Text.RegularExpressions.Regex.IsMatch(tbEmail.Text, @"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"))
            {
                tbEmail.SetResourceReference(Control.ForegroundProperty, SystemColors.ControlTextBrushKey);
                //tbEmail.Foreground = new SolidColorBrush(Colors.Black);
            }

            if (tbTelefon.Text.ToList<char>().Distinct().Count() > 4)
            {
                tbTelefon.SetResourceReference(Control.ForegroundProperty, SystemColors.ControlTextBrushKey);
                //tbTelefon.Foreground = new SolidColorBrush(Colors.Black);
            }

            checkButton();
        }

        private void checkButton()
        {
            if (special)
                btnCreate.IsEnabled = true;
            else
            {
                if (
                    tbVorname.Text != "" &&
                    tbNachname.Text != "" &&
                    tbEmail.Text != "" &&
                    tbAbteilung.Text != "" &&
                    tbTelefon.Text != "" &&
                    tbAdresse.Text != "" &&
                    tbPLZ.Text != "" &&
                    tbVorgesetzter.Text != "" &&
                    cbFirma.SelectedIndex != -1 &&
                    cBCorrectness.IsChecked.Value == true &&
                    //cBSchicht.IsChecked.Value == true &&
                    (rbDKennzeichen.IsChecked.Value && (!string.IsNullOrWhiteSpace(tbDTownKennzeichen.Text)
                                                    && !string.IsNullOrWhiteSpace(tbDCharsKennzeichen.Text)
                                                    && !string.IsNullOrWhiteSpace(tbDDigitsKennzeichen.Text))
                    ||
                    (rbOtherKennzeichen.IsChecked.Value &&
                    !string.IsNullOrWhiteSpace(tbOtherKennzeichen.Text)))
                    ||
                    (rbVersKennzeichen.IsChecked.Value &&
                    !string.IsNullOrWhiteSpace(tbVersKennzeichen1.Text) &&
                    !string.IsNullOrWhiteSpace(tbVersKennzeichen2.Text))
                    )
                    btnCreate.IsEnabled = true;
                else btnCreate.IsEnabled = false;
                //tbTelefon != "";
            }
        }

        private void tbPLZ_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (tbPLZ.Text.Length == 5 && !special)
            {
                //foreach (var s in plz)
                //{
                //    if (tbPLZ.Text == s)
                //    {
                //        MessageBox.Show(this, "Mitarbeiter im Stadtgebiet München sind nicht berechtigt Parkkarten zu beantragen!\n\nDie Angabe falscher Daten stellt einen fristlosen Kündigungsgrund dar!!", "Keine Berechtigung!", MessageBoxButton.OK, MessageBoxImage.Information);
                //        tbPLZ.Text = "";
                //        btnCreate.IsEnabled = false;
                //        return;
                //    }
                //}

                checkButton();
            }
            else btnCreate.IsEnabled = false;
        }




        private async void btnCreate_Click(object sender, RoutedEventArgs e)
        {
            if (tbTelefon.Text.ToList<char>().Distinct().Count() < 4)
            {
                MessageBox.Show("Telefonnummer muss qualifiziert ausgefüllt werden!", "Fehlerhafte Nummer", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            if (!System.Text.RegularExpressions.Regex.IsMatch(tbPLZ.Text, @"^\d{5}$"))
            {
                MessageBox.Show(this, "Postleitzahl muss exakt 5 Stellen haben und darf nur Zahlen enthalten", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            if(rbDKennzeichen.IsChecked.Value && 
                (string.IsNullOrWhiteSpace(tbDTownKennzeichen.Text) || 
                (string.IsNullOrWhiteSpace(tbDCharsKennzeichen.Text) || 
                string.IsNullOrWhiteSpace(tbDDigitsKennzeichen.Text))))
            {
                MessageBox.Show(this, "Kennzeichen muss vollständig ausgefüllt sein", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            if(rbOtherKennzeichen.IsChecked.Value && 
                string.IsNullOrWhiteSpace(tbOtherKennzeichen.Text))
            {
                MessageBox.Show(this, "Kennzeichen muss ausgefüllt sein", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            if (rbVersKennzeichen.IsChecked.Value &&
                string.IsNullOrWhiteSpace(tbVersKennzeichen1.Text) &&
                string.IsNullOrWhiteSpace(tbVersKennzeichen2.Text))
            {
                MessageBox.Show(this, "Kennzeichen muss vollständig ausgefüllt sein", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            if (!System.Text.RegularExpressions.Regex.IsMatch(tbEmail.Text, @"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"))
            {
                MessageBox.Show(this, "Email nicht vollständig oder falsches Format", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            if(!System.Text.RegularExpressions.Regex.IsMatch(tbAdresse.Text, @"^.+\s{1}\d+\s*\w*"))
            {
                MessageBox.Show(this, "Adresse nicht vollständig oder falsches Format\n\nFormat: Straße Leerzeichen Hausnummer Zusatz(wenn vorhanden)", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            if (!(string.IsNullOrWhiteSpace(tbVorname.Text) &&
                string.IsNullOrWhiteSpace(tbNachname.Text) &&
                string.IsNullOrWhiteSpace(tbEmail.Text) &&
                string.IsNullOrWhiteSpace(tbTelefon.Text) &&
                string.IsNullOrWhiteSpace(tbAbteilung.Text) &&
                string.IsNullOrWhiteSpace(tbAdresse.Text) &&
                string.IsNullOrWhiteSpace(tbPLZ.Text) &&
                string.IsNullOrWhiteSpace(tbVorgesetzter.Text) &&
                //!cBSchicht.IsChecked.Value &&
                !cBCorrectness.IsChecked.Value)
                || special)
            {

                int _schicht = 0, _correctness = 0;
                string _bemerkung = "Erstellt durch ZKuP";

                //if (cBSchicht.IsChecked.Value) _schicht = 1;
                if (cBCorrectness.IsChecked.Value) _correctness = 1;
                if (!string.IsNullOrWhiteSpace(tbBemerkung.Text)) _bemerkung = tbBemerkung.Text;

                var isKrad = rbPKW.IsChecked.Value ? 0 : 1;

                if (rbOtherKennzeichen.IsChecked.Value)
                {
                    //await SQL.WriteSQL($"INSERT INTO {MainWindow.table}.`parkausweise` (MA_Vorname,MA_Name,Kennzeichen,Email,Telefon,Abteilung,Firma,Adresse,PLZ,Vorgesetzter,AcceptedCorrectness,Schicht,Bemerkung,isKrad) VALUES ('{tbVorname.Text}','{tbNachname.Text}','{tbOtherKennzeichen.Text}','{tbEmail.Text}','{tbTelefon.Text}','{tbAbteilung.Text}','{cbFirma.Text}','{tbAdresse.Text}','{tbPLZ.Text}','{tbVorgesetzter.Text}','{_correctness}','{_schicht}','{_bemerkung}',{isKrad})");
                    await SQL.CreateAndWriteSQL($"INSERT INTO {MainWindow.table}.`parkausweise` (MA_Vorname,MA_Name,Kennzeichen,Email,Telefon,Abteilung,Firma,Adresse,PLZ,Vorgesetzter,AcceptedCorrectness,Schicht,Bemerkung,isKrad) VALUES (@tbVorname,@tbNachname,@tbOtherKennzeichen,@tbEmail,@tbTelefon,@tbAbteilung,@cbFirma,@tbAdresse,@tbPLZ,@tbVorgesetzter,@_correctness,@_schicht,@_bemerkung,@isKrad)", new List<MySqlParameter>()
                            {
                                new MySqlParameter("@tbVorname", tbVorname.Text),
                                new MySqlParameter("@tbNachname", tbNachname.Text),
                                new MySqlParameter("@tbOtherKennzeichen", tbOtherKennzeichen.Text),
                                new MySqlParameter("@tbEmail", tbEmail.Text),
                                new MySqlParameter("@tbTelefon", tbTelefon.Text),
                                new MySqlParameter("@tbAbteilung", tbAbteilung.Text),
                                new MySqlParameter("@cbFirma", cbFirma.Text),
                                new MySqlParameter("@tbAdresse", tbAdresse.Text),
                                new MySqlParameter("@tbPLZ", tbPLZ.Text),
                                new MySqlParameter("@tbVorgesetzter", tbVorgesetzter.Text),
                                new MySqlParameter("@_correctness", _correctness),
                                new MySqlParameter("@_schicht", _schicht),
                                new MySqlParameter("@_bemerkung", _bemerkung),
                                new MySqlParameter("@isKrad", isKrad)
                            });


                    var id = SQL.ReadSingleValue($"SELECT idparkausweise FROM {MainWindow.table}.parkausweise ORDER BY idparkausweise DESC LIMIT 1");
                    var name = SQL.ReadSingleValue($"SELECT MA_Name FROM {MainWindow.table}.parkausweise WHERE idparkausweise={id}");

                    if (name == tbNachname.Text)
                    {
                        MessageBox.Show(this, $"Antrag erfolgreich abgeschickt\n\nIhre Karte hat die Nr. {id}", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);

                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show(this, $"Antrag konnte nicht gesendet werden, bitte erneut versuchen\n\nSollte der Fehler weiterhin auftreten, bitte an Ihren Administrator wenden", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }                    
                }
                else if (rbDKennzeichen.IsChecked.Value)
                {
                    //await SQL.WriteSQL($"INSERT INTO {MainWindow.table}.parkausweise (MA_Vorname,MA_Name,Kennzeichen,Email,Telefon,Abteilung,Firma,Adresse,PLZ,Vorgesetzter,AcceptedCorrectness,Schicht,Bemerkung,isKrad) VALUES ('{tbVorname.Text}','{tbNachname.Text}','{tbDTownKennzeichen.Text}-{tbDCharsKennzeichen.Text} {tbDDigitsKennzeichen.Text}','{tbEmail.Text}','{tbTelefon.Text}','{tbAbteilung.Text}','{cbFirma.Text}','{tbAdresse.Text}','{tbPLZ.Text}','{tbVorgesetzter.Text}','{_correctness}','{_schicht}','{_bemerkung}',{isKrad})");
                    await SQL.CreateAndWriteSQL($"INSERT INTO {MainWindow.table}.parkausweise (MA_Vorname,MA_Name,Kennzeichen,Email,Telefon,Abteilung,Firma,Adresse,PLZ,Vorgesetzter,AcceptedCorrectness,Schicht,Bemerkung,isKrad) VALUES (@tbVorname,@tbNachname,@Kennzeichen,@tbEmail,@tbTelefon,@tbAbteilung,@cbFirma,@tbAdresse,@tbPLZ,@tbVorgesetzter,@_correctness,@_schicht,@_bemerkung,@isKrad)", new List<MySqlParameter>()
                            {
                                new MySqlParameter("@tbVorname", tbVorname.Text),
                                new MySqlParameter("@tbNachname", tbNachname.Text),
                                new MySqlParameter("@Kennzeichen", $"{tbDTownKennzeichen.Text}-{tbDCharsKennzeichen.Text} {tbDDigitsKennzeichen.Text}"),
                                new MySqlParameter("@tbEmail", tbEmail.Text),
                                new MySqlParameter("@tbTelefon", tbTelefon.Text),
                                new MySqlParameter("@tbAbteilung", tbAbteilung.Text),
                                new MySqlParameter("@cbFirma", cbFirma.Text),
                                new MySqlParameter("@tbAdresse", tbAdresse.Text),
                                new MySqlParameter("@tbPLZ", tbPLZ.Text),
                                new MySqlParameter("@tbVorgesetzter", tbVorgesetzter.Text),
                                new MySqlParameter("@_correctness", _correctness),
                                new MySqlParameter("@_schicht", _schicht),
                                new MySqlParameter("@_bemerkung", _bemerkung),
                                new MySqlParameter("@isKrad", isKrad)
                            });

                    var id = SQL.ReadSingleValue($"SELECT idparkausweise FROM {MainWindow.table}.parkausweise ORDER BY idparkausweise DESC LIMIT 1");
                    var name = SQL.ReadSingleValue($"SELECT MA_Name FROM {MainWindow.table}.parkausweise WHERE idparkausweise={id}");

                    if (name == tbNachname.Text)
                    {
                        MessageBox.Show(this, $"Antrag erfolgreich abgeschickt\n\nIhre Karte hat die Nr. {id}", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);

                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show(this, $"Antrag konnte nicht gesendet werden, bitte erneut versuchen\n\nSollte der Fehler weiterhin auftreten, bitte an Ihren Administrator wenden", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }
                }
                else if (rbVersKennzeichen.IsChecked.Value)
                {
                    //await SQL.WriteSQL($"INSERT INTO {MainWindow.table}.parkausweise (MA_Vorname,MA_Name,Kennzeichen,Email,Telefon,Abteilung,Firma,Adresse,PLZ,Vorgesetzter,AcceptedCorrectness,Schicht,Bemerkung,isKrad) VALUES ('{tbVorname.Text}','{tbNachname.Text}','{tbVersKennzeichen1.Text} {tbVersKennzeichen2.Text}','{tbEmail.Text}','{tbTelefon.Text}','{tbAbteilung.Text}','{cbFirma.Text}','{tbAdresse.Text}','{tbPLZ.Text}','{tbVorgesetzter.Text}','{_correctness}','{_schicht}','{_bemerkung}',{isKrad})");
                    await SQL.CreateAndWriteSQL($"INSERT INTO {MainWindow.table}.parkausweise (MA_Vorname,MA_Name,Kennzeichen,Email,Telefon,Abteilung,Firma,Adresse,PLZ,Vorgesetzter,AcceptedCorrectness,Schicht,Bemerkung,isKrad) VALUES (@tbVorname,@tbNachname,@tbVersKennzeichen,@tbEmail,@tbTelefon,@tbAbteilung,@cbFirma,@tbAdresse,@tbPLZ,@tbVorgesetzter,@_correctness,@_schicht,@_bemerkung,@isKrad)", new List<MySqlParameter>()
                            {
                                new MySqlParameter("@tbVorname", tbVorname.Text),
                                new MySqlParameter("@tbNachname", tbNachname.Text),
                                new MySqlParameter("@tbVersKennzeichen", $"{tbVersKennzeichen1.Text} {tbVersKennzeichen2.Text}"),
                                new MySqlParameter("@tbEmail", tbEmail.Text),
                                new MySqlParameter("@tbTelefon", tbTelefon.Text),
                                new MySqlParameter("@tbAbteilung", tbAbteilung.Text),
                                new MySqlParameter("@cbFirma", cbFirma.Text),
                                new MySqlParameter("@tbAdresse", tbAdresse.Text),
                                new MySqlParameter("@tbPLZ", tbPLZ.Text),
                                new MySqlParameter("@tbVorgesetzter", tbVorgesetzter.Text),
                                new MySqlParameter("@_correctness", _correctness),
                                new MySqlParameter("@_schicht", _schicht),
                                new MySqlParameter("@_bemerkung", _bemerkung),
                                new MySqlParameter("@isKrad", isKrad)
                            });


                    var id = SQL.ReadSingleValue($"SELECT idparkausweise FROM {MainWindow.table}.parkausweise ORDER BY idparkausweise DESC LIMIT 1");
                    var name = SQL.ReadSingleValue($"SELECT MA_Name FROM  {MainWindow.table}.parkausweise WHERE idparkausweise={id}");

                    if (name == tbNachname.Text)
                    {
                        MessageBox.Show(this, $"Antrag erfolgreich abgeschickt\n\nIhre Karte hat die Nr. {id}", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);

                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show(this, $"Antrag konnte nicht gesendet werden, bitte erneut versuchen\n\nSollte der Fehler weiterhin auftreten, bitte an Ihren Administrator wenden", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }
                }
            }
            else MessageBox.Show(this, "Es müssen alle benötigten(*) Felder ausgefüllt werden", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
        }





        private void cBCorrectness_Unchecked(object sender, RoutedEventArgs e)
        {
            btnCreate.IsEnabled = false;
        }

        private void cBCorrectness_Checked(object sender, RoutedEventArgs e)
        {
            checkButton();
        }

        private void cBSchicht_Checked(object sender, RoutedEventArgs e)
        {
            checkButton();
        }

        private void cBSchicht_Unchecked(object sender, RoutedEventArgs e)
        {
           if(!special) btnCreate.IsEnabled = false;
        }

        private void tbPLZ_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            if ((sender as TextBox).Text.Length >= 5)
            {
                e.Handled = true;
                return;
            }


            if (!System.Text.RegularExpressions.Regex.IsMatch(e.Text, "^[0-9]*$"))
            {
                e.Handled = true;
                return;
            }
        }

        private void tbPLZ_TextInput(object sender, TextCompositionEventArgs e)
        {
            if ((sender as TextBox).Text.Length >= 5)
            {
                e.Handled = true;
                return;
            }

            if (!System.Text.RegularExpressions.Regex.IsMatch(e.Text, "^[0-9]*$"))
            {
                e.Handled = true;
                return;
            }
        }

        private void TextBoxes_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key != Key.OemComma)
            {
                e.Handled = false;
                return;
            }
            else
            {
                MessageBox.Show(this, "Komma (',') ist ein nicht erlaubtes Zeichen", "Achtung", MessageBoxButton.OK, MessageBoxImage.Information);
                e.Handled = true;
            }
            return;
        }

        private void tbPLZ_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            if (e.Command == ApplicationCommands.Paste)
            {
                e.Handled = true;
            }
        }


        private void rbDKennzeichen_Checked(object sender, RoutedEventArgs e)
        {
            tbOtherKennzeichen.Visibility = Visibility.Collapsed;
            spVersKennzeichen.Visibility = Visibility.Collapsed;

            spDKennzeichen.Visibility = Visibility.Visible;            
        }

        private void rbOtherKennzeichen_Checked(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show(this, "Diese Funktion darf nicht für deutsche Kennzeichen genutzt werden\nDie Kennzeichen werden überprüft und bei deutschem Kennzeichen abgelehnt\n\nMöchten Sie sicher ein ausländisches Kennzeichen eingeben?", "Achtung!", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No) == MessageBoxResult.Yes)
            {
                spDKennzeichen.Visibility = Visibility.Collapsed;
                spVersKennzeichen.Visibility = Visibility.Collapsed;

                tbOtherKennzeichen.Visibility = Visibility.Visible;
            }
            else
            {
                rbDKennzeichen.IsChecked = true;
            }
        }

        private void rbVersKennzeichen_Checked(object sender, RoutedEventArgs e)
        {
            tbOtherKennzeichen.Visibility = Visibility.Collapsed;
            spDKennzeichen.Visibility = Visibility.Collapsed;

            spVersKennzeichen.Visibility = Visibility.Visible;
        }


        private void tbDTownKennzeichen_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            if ((sender as TextBox).Text.Length >= 3)
            {
                e.Handled = true;
                return;
            }

            if (!System.Text.RegularExpressions.Regex.IsMatch(e.Text, "^[A-ZÄÖÜ]?[A-ZÄÖÜ]?[A-ZÄÖÜ]?"))
            {
                e.Handled = true;
                return;
            }
        }

        private void tbDCharsKennzeichen_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            if ((sender as TextBox).Text.Length >= 2)
            {
                e.Handled = true;
                return;
            }

            if (!System.Text.RegularExpressions.Regex.IsMatch(e.Text, "^[A-ZÄÖÜ]?[A-ZÄÖÜ]?"))
            {
                e.Handled = true;
                return;
            }
        }

        private void tbDDigitsKennzeichen_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            if ((sender as TextBox).Text.Length >= 5)
            {
                e.Handled = true;
                return;
            }

            if (!System.Text.RegularExpressions.Regex.IsMatch(e.Text, "^[0-9]*$"))
            {
                e.Handled = true;
                return;
            }
        }

        private void tbAdresse_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(tbAdresse.Text, @"^.+\s{1}\d+\s*\w*"))
            {
                tbAdresse.Foreground = new SolidColorBrush(Colors.Red);
                tbAdresse.ToolTip = "Adresse nicht vollständig oder falsches Format";
            }
            else
            {
                tbAdresse.SetResourceReference(Control.ForegroundProperty, SystemColors.ControlTextBrushKey);
                //tbAdresse.Foreground = new SolidColorBrush(Colors.Black);
                tbAdresse.ToolTip = "";
            }
        }

        private void tbEmail_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(tbEmail.Text, @"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"))
            {
                tbEmail.Foreground = new SolidColorBrush(Colors.Red);
                tbEmail.ToolTip = "Email nicht vollständig oder falsches Format";
            }
            else
            {
                tbEmail.SetResourceReference(Control.ForegroundProperty, SystemColors.ControlTextBrushKey);
                //tbEmail.Foreground = new SolidColorBrush(Colors.Black);
                tbEmail.ToolTip = "";
            }

        }

        private void tbTelefon_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {

            if (tbTelefon.Text.ToList<char>().Distinct().Count() < 4)
            {
                tbTelefon.Foreground = new SolidColorBrush(Colors.Red);
                tbTelefon.ToolTip = "Telefonnummer muss qualifiziert ausgefüllt werden";
            }
            else
            {
                tbTelefon.SetResourceReference(Control.ForegroundProperty, SystemColors.ControlTextBrushKey);
                //tbTelefon.Foreground = new SolidColorBrush(Colors.Black);
                tbTelefon.ToolTip = "";
            }
        }



        private void tbBemerkung_PreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            lblBemerkung.Visibility = Visibility.Collapsed;
        }

        private void tbBemerkung_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            if (string.IsNullOrWhiteSpace(tbBemerkung.Text)) lblBemerkung.Visibility = Visibility.Visible;
            else lblBemerkung.Visibility = Visibility.Collapsed;
        }



        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Helper.CheckWindowIsInScreenSpace(this);
        }

        private void Window_LocationChanged(object sender, EventArgs e)
        {
            Helper.CheckWindowIsInScreenSpace(this);
        }
    }
}
