private void AddNovyNakladAutaB_Click(object sender, EventArgs e)
        {
            if (!GeneratorID.ExistujeID(AutoIDTB.Text))
            {
                MessageBox.Show("Dané auto neexistuje - zvolte validní ID", "ERROR");
                return;
            }



            ValidaceDatumuACasu(DatumNakladuDTP.Value, CasNakladuTB.Text, true);

            DateTime datum = DatumNakladuDTP.Value;

            DateTime cas = DateTime.Parse(CasNakladuTB.Text);

            DateTime datumACas = new DateTime(datum.Year, datum.Month, datum.Day, cas.Hour, cas.Minute, 00);

            if (CisloFakturyTB.Text.Length < 0 || CenaNakladuTB.Text.Length < 0 || PopisNakladuTB.Text.Length < 0)
            {
                MessageBox.Show("Vstupy nesmí být prázdné - minimálně je potřeba 1 znak", "ERROR");
                return;
            }

            if (!KontrolaTextVstupu.KontrolaVolnychVstupu(CisloFakturyTB.Text))
            {
                MessageBox.Show("Prosím nepoužívejte znak | v čísle faktury", "ERROR");
            }
            if (!KontrolaTextVstupu.KontrolaVolnychVstupu(PopisNakladuTB.Text))
            {
                MessageBox.Show("Prosím nepoužívejte znak | v popis nákladu", "ERROR");
            }

            decimal cena;

            if (decimal.TryParse(CenaNakladuTB.Text, out cena))
            {
                cena = decimal.Parse(CenaNakladuTB.Text);
            }
            else
            {
                MessageBox.Show("Nelze překonvertovat cenu na číslo", "ERROR");
                return;
            }

            string casovaNarocnostString = CasovaNarocnostTB.Text;

            if (casovaNarocnostString.Contains(':'))
            {
                string[] poleHodinAMinut = casovaNarocnostString.Split(':');
                if (poleHodinAMinut.Length == 3)
                {
                    if (poleHodinAMinut[0].Length == 2 && poleHodinAMinut[1].Length == 2 && poleHodinAMinut[2].Length == 2)
                    {
                        if (int.TryParse(poleHodinAMinut[0], out int i) && int.TryParse(poleHodinAMinut[1], out int y) && int.TryParse(poleHodinAMinut[1], out int z))
                        {
                            i = int.Parse(poleHodinAMinut[0]);
                            y = int.Parse(poleHodinAMinut[1]);
                            z = int.Parse(poleHodinAMinut[2]);

                            if (i >= 0 && i <= 23 && y >= 0 && y <= 59 && z <= 99)
                            {
                                //correct vstup
                            }
                            else
                            {
                                MessageBox.Show("Časová náročnost nemá správný formát", "ERROR");
                                return;
                            }
                        }
                        else
                        {
                            MessageBox.Show("Časová náročnost nemá správný formát", "ERROR");
                            return;
                        }
                    }
                    else
                    {
                        MessageBox.Show("Časová náročnost nemá správný formát", "ERROR");
                        return;
                    }
                }
                else
                {
                    MessageBox.Show("Časová náročnost nemá správný formát", "ERROR");
                    return;
                }
            }
            else
            {
                MessageBox.Show("Časová náročnost nemá správný formát", "ERROR");
                return;
            }

            TimeSpan casovaNarocnostTimeSpan = TimeSpan.Parse(casovaNarocnostString);


            NakladyAuta novyNaklad = new NakladyAuta(CisloFakturyTB.Text, AutoIDTB.Text, PopisNakladuTB.Text, datumACas, casovaNarocnostTimeSpan, cena);

            PromenneProVsechnyForms.NakladyList.Add(novyNaklad);
            foreach (Auto a in PromenneProVsechnyForms.AutaList)
            {
                if (a.AutoID == AutoIDTB.Text)
                {
                    a.NakladyTohotoAuta.Add(novyNaklad);
                    MessageBox.Show("Úspěšně byla přidán náklad - pozn.: pro aktualizaci listboxu vypište jeho obsah znovu", "SUCCESS");
                    break;
                }
            }
        }
        private bool LoadVracejiciValiditu(string[] radkySouboru)
        {
            if (radkySouboru[0] == "UParker.txt" && radkySouboru[radkySouboru.Length - 1] == "")
            {
                int nejdelsiUserID    = 6;
                int indexZacatkuUseru = Array.IndexOf(radkySouboru, "Users:") + 1;
                int indexKonecUseru   = Array.IndexOf(radkySouboru, "", indexZacatkuUseru);
                if (indexKonecUseru - indexZacatkuUseru >= 1)
                {
                    for (int i = indexZacatkuUseru; i < indexKonecUseru; i++)
                    {
                        string patternUser = "******";
                        Regex  regex       = new Regex(patternUser);
                        if (regex.IsMatch(radkySouboru[i]) == false)
                        {
                            return(false);
                        }
                        else
                        {
                            GroupCollection gc = regex.Match(radkySouboru[i]).Groups;
                            if (GeneratorID.ExistujeID(gc[1].ToString()))
                            {
                                MessageBox.Show("V souboru nalezeno duplictní user ID: " + gc[1], "ERROR");
                                return(false);
                            }

                            if (gc[6].ToString() == "")
                            {
                                PromenneProVsechnyForms.UsersList.Add(new User(gc[1].ToString(), gc[2].ToString(), gc[3].ToString(), gc[4].ToString(), gc[5].ToString(), bool.Parse(gc[7].ToString()), bool.Parse(gc[8].ToString()), bool.Parse(gc[9].ToString())));
                            }
                            else //"dd.MM.yyyy HH:mm"
                            {
                                PromenneProVsechnyForms.UsersList.Add(new User(gc[1].ToString(), gc[2].ToString(), gc[3].ToString(), gc[4].ToString(), gc[5].ToString(), DateTime.Parse(gc[6].ToString()), bool.Parse(gc[7].ToString()), bool.Parse(gc[8].ToString()), bool.Parse(gc[9].ToString())));
                            }
                            if (gc[1].Length - 1 > nejdelsiUserID)
                            {
                                nejdelsiUserID = gc[1].Length - 1;
                            }
                        }
                    }
                }
                else
                {
                    MessageBox.Show("No-User - doporučení: vytvořte defaultní databázi, která obsahuje 1 admin usera", "ERROR");
                    return(false);
                }
                PromenneProVsechnyForms.pocetCiferVID = nejdelsiUserID;

                int indexZacatkuAut = Array.IndexOf(radkySouboru, "Auta:") + 1;
                int indexKonecAut   = Array.IndexOf(radkySouboru, "", indexZacatkuAut);
                if (indexKonecAut - indexZacatkuAut >= 1)
                {
                    for (int i = indexZacatkuAut; i < indexKonecAut; i++)
                    {
                        string patternAut = "^(A\\d*[A-Z]{2})\\|([a-zA-ZěščřžýáíéóúůďťňĎŇŤŠČŘŽÝÁÍÉÚŮ 0-9-]*)\\|([a-zA-ZěščřžýáíéóúůďťňĎŇŤŠČŘŽÝÁÍÉÚŮ 0-9-]*)\\|([a-zA-ZěščřžýáíéóúůďťňĎŇŤŠČŘŽÝÁÍÉÚŮ -]*)\\|(\\d+\\.?\\d*)\\|(MP|D)\\|(DoOdvolani|Odstraneno|-|\\d{1,2}\\.\\d{1,2}\\.\\d\\d\\d\\d \\d\\d:\\d\\d)$";
                        Regex  regex      = new Regex(patternAut);
                        if (regex.IsMatch(radkySouboru[i]) == false)
                        {
                            return(false);
                        }
                        else
                        {
                            GroupCollection gc = regex.Match(radkySouboru[i]).Groups;
                            if (GeneratorID.ExistujeID(gc[1].ToString()))
                            {
                                MessageBox.Show("V souboru nalezeno duplictní auto ID: " + gc[1], "ERROR");
                                return(false);
                            }
                            double spotrebaVDouble = double.Parse(gc[5].Value, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo);
                            PromenneProVsechnyForms.AutaList.Add(new Auto(gc[1].Value, gc[2].Value, gc[3].Value, gc[4].Value, spotrebaVDouble, gc[6].Value, gc[7].Value));
                        }
                    }
                }

                int indexZacatkuNakladu = Array.IndexOf(radkySouboru, "Naklady:") + 1;
                int indexKonecNakladu   = Array.IndexOf(radkySouboru, "", indexZacatkuNakladu);
                if (indexKonecNakladu - indexZacatkuNakladu >= 1)
                {
                    for (int i = indexZacatkuNakladu; i < indexKonecNakladu; i++)
                    {
                        string patternNakladu = "^(.*?)\\|(A\\d*[A-Z]{2})\\|(.*?)\\|(\\d{1,2}\\.\\d{1,2}\\.\\d\\d\\d\\d \\d\\d:\\d\\d)\\|(\\d\\d:\\d\\d:\\d\\d)\\|-?(\\d*(\\.\\d+)?)$";
                        Regex  regex          = new Regex(patternNakladu);
                        if (regex.IsMatch(radkySouboru[i]) == false)
                        {
                            return(false);
                        }
                        else
                        {
                            GroupCollection gc           = regex.Match(radkySouboru[i]).Groups;
                            decimal         cenaVDecimal = decimal.Parse(gc[6].Value, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo);
                            NakladyAuta     naklad       = new NakladyAuta(gc[1].Value, gc[2].Value, gc[3].Value, DateTime.Parse(gc[4].Value), TimeSpan.Parse(gc[5].Value), cenaVDecimal);
                            PromenneProVsechnyForms.NakladyList.Add(naklad);

                            if (GeneratorID.ExistujeID(gc[2].Value))
                            {
                                foreach (Auto a in PromenneProVsechnyForms.AutaList)
                                {
                                    if (gc[2].Value == a.AutoID)
                                    {
                                        a.NakladyTohotoAuta.Add(naklad);
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                MessageBox.Show("V souboru se vyskytuje náklad vázaný na neexistující ID - náklad je navázan na ID auta: " + gc[2].Value, "ERROR");
                                return(false);
                            }
                        }
                    }
                }

                int indexZacatkuRezervaci = Array.IndexOf(radkySouboru, "Rezervace:") + 1;
                int indexKonecRezervaci   = Array.IndexOf(radkySouboru, "", indexZacatkuRezervaci);
                if (indexKonecRezervaci - indexZacatkuRezervaci >= 1)
                {
                    for (int i = indexZacatkuRezervaci; i < indexKonecRezervaci; i++)
                    {
                        string patternRezervace = "^(R\\d*)\\|(U\\d*[A-Z]{2})\\|(\\d{1,2}\\.\\d{1,2}\\.\\d\\d\\d\\d \\d\\d:\\d\\d)\\|(\\d{1,2}\\.\\d{1,2}\\.\\d\\d\\d\\d \\d\\d:\\d\\d)\\|(A\\d*[A-Z]{2})\\|(Proběhlo|Zrušeno - uživatelem|Zrušeno - adminem|Zrušeno - uživatel již neexistuje|Zrušeno - vozidlo odstraněno|Zrušeno - vozidlo mimo provoz|Neproběhlo)$";
                        Regex  regex            = new Regex(patternRezervace);
                        if (regex.IsMatch(radkySouboru[i]) == false)
                        {
                            return(false);
                        }
                        else
                        {
                            GroupCollection gc = regex.Match(radkySouboru[i]).Groups;
                            if (GeneratorID.ExistujeID(gc[1].ToString()))
                            {
                                MessageBox.Show("V souboru nalezeno duplictní rezervace ID: " + gc[1], "ERROR");
                                return(false);
                            }

                            if (!(GeneratorID.ExistujeID(gc[2].Value) && GeneratorID.ExistujeID(gc[5].Value)))
                            {
                                MessageBox.Show("V souboru se vyskytuje rezervace vázaná na neexistující ID - rezervace: " + gc[1].Value, "ERROR");
                                return(false);
                            }

                            DateTime casOd = DateTime.Parse(gc[3].Value);
                            DateTime casDo = DateTime.Parse(gc[4].Value);

                            if (casDo > casOd)
                            {
                                PromenneProVsechnyForms.RezervaceList.Add(new Rezervace(gc[1].Value, gc[2].Value, casOd, casDo, gc[5].Value, gc[6].Value));
                            }
                            else
                            {
                                return(false);
                            }
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("Úvod+závěr", "ERROR");
                return(false);
            }

            return(true);
        }
        private void AddNakladNovehoAutaB_Click(object sender, EventArgs e)
        {
            if (!ValidaceVstupuVTextBoxuProNedostupnost(DatumNakladuDTP.Value, CasNakladuTB.Text, true))
            {
                return;
            }

            if (CisloFakturyTB.Text.Length < 0 || CenaNakladuTB.Text.Length < 0 || PopisNakladuTB.Text.Length < 0)
            {
                MessageBox.Show("Vstupy nesmí být prázdné - minimálně je potřeba 1 znak", "ERROR");
                return;
            }

            if (!KontrolaTextVstupu.KontrolaVolnychVstupu(CisloFakturyTB.Text))
            {
                MessageBox.Show("Prosím nepoužívejte znak | v čísle faktury", "ERROR");
            }
            if (!KontrolaTextVstupu.KontrolaVolnychVstupu(PopisNakladuTB.Text))
            {
                MessageBox.Show("Prosím nepoužívejte znak | v popis nákladu", "ERROR");
            }

            string casovaNarocnostString = CasovaNarocnostTB.Text;

            if (casovaNarocnostString.Contains(':'))
            {
                string[] poleHodinAMinut = casovaNarocnostString.Split(':');
                if (poleHodinAMinut.Length == 3)
                {
                    if (poleHodinAMinut[0].Length == 2 && poleHodinAMinut[1].Length == 2 && poleHodinAMinut[2].Length == 2)
                    {
                        if (int.TryParse(poleHodinAMinut[0], out int i) && int.TryParse(poleHodinAMinut[1], out int y) && int.TryParse(poleHodinAMinut[1], out int z))
                        {
                            i = int.Parse(poleHodinAMinut[0]);
                            y = int.Parse(poleHodinAMinut[1]);
                            z = int.Parse(poleHodinAMinut[2]);

                            if (i >= 0 && i <= 23 && y >= 0 && y <= 59 && z <= 99)
                            {
                                //correct vstup
                            }
                            else
                            {
                                MessageBox.Show("Časová náročnost nemá správný formát", "ERROR");
                                return;
                            }
                        }
                        else
                        {
                            MessageBox.Show("Časová náročnost nemá správný formát", "ERROR");
                            return;
                        }
                    }
                    else
                    {
                        MessageBox.Show("Časová náročnost nemá správný formát", "ERROR");
                        return;
                    }
                }
                else
                {
                    MessageBox.Show("Časová náročnost nemá správný formát", "ERROR");
                    return;
                }
            }
            else
            {
                MessageBox.Show("Časová náročnost nemá správný formát", "ERROR");
                return;
            }

            DateTime datum = DatumNakladuDTP.Value;

            DateTime cas = DateTime.Parse(CasNakladuTB.Text);

            DateTime datumACas = new DateTime(datum.Year, datum.Month, datum.Day, cas.Hour, cas.Minute, 00);

            decimal cena;

            if (decimal.TryParse(CenaNakladuTB.Text, out cena))
            {
                cena = decimal.Parse(CenaNakladuTB.Text);
            }
            else
            {
                MessageBox.Show("Nelze překonvertovat cenu na číslo", "ERROR");
                return;
            }

            NakladyAuta novyNaklad = new NakladyAuta(CisloFakturyTB.Text, PopisNakladuTB.Text, DatumNakladuDTP.Value, TimeSpan.Parse(CasovaNarocnostTB.Text), cena);

            listNakladuNovehoAuta.Add(novyNaklad);
            string reformatovanyNaklad = $"{CisloFakturyTB.Text}|{PopisNakladuTB.Text}|{datumACas.ToString("dd.MM.yyyy HH:mm")}|{TimeSpan.Parse(CasovaNarocnostTB.Text).ToString()}|{cena}";

            NakladyLB.Items.Add(reformatovanyNaklad);
            NakladyLB.Items.Add("");
        }