private void AddUserB_Click(object sender, EventArgs e)
        {
            if (UsernameTB.Text.Length == 0 || KrestniTB.Text.Length == 0 || PrijmeniTB.Text.Length == 0 || HesloTB.Text.Length < 5)
            {
                MessageBox.Show("Jména a username nesmí být prázdné + heslo musí být delší než 5 znaků", "ERROR");
                return;
            }

            if (!KontrolaTextVstupu.KontrolaUsernameANazvuAut(UsernameTB.Text))
            {
                MessageBox.Show("Prosím používejte znaky české abecedy, pomlčky a čísla - jiné znaky jsou v username zakázány", "ERROR");
                return;
            }
            if (!KontrolaTextVstupu.KontrolaJmen(PrijmeniTB.Text))
            {
                MessageBox.Show("Prosím používejte znaky české abecedy a pomlčky - jiné znaky jsou v příjmení zakázány.", "ERROR");
                return;
            }
            if (!KontrolaTextVstupu.KontrolaJmen(KrestniTB.Text))
            {
                MessageBox.Show("Prosím používejte znaky české abecedy a pomlčky - jiné znaky jsou v křestním jméně zakázány.", "ERROR");
                return;
            }


            User novyUser = new User(GeneratorID.VygenerujUserID(), UsernameTB.Text, KrestniTB.Text, PrijmeniTB.Text, SifrovaniHesla.Sifruj(UsernameTB.Text, HesloTB.Text), IsAdminCheckB.Checked, VynuceniZmenyHeslaCheckB.Checked, false);

            PromenneProVsechnyForms.UsersList.Add(novyUser);
            ReloadListBoxUseru();
            MessageBox.Show("Uživatel byl úspěšně přidán", "SUCCESS");
        }
        private void AddAutoB_Click(object sender, EventArgs e)
        {
            string idNovehoAuta = GeneratorID.VygenerujAutoID();

            for (int i = 0; i < listNakladuNovehoAuta.Count; i++)
            {
                listNakladuNovehoAuta[i].AutoID = idNovehoAuta;
                PromenneProVsechnyForms.NakladyList.Add(listNakladuNovehoAuta[i]);
            }

            if (!KontrolaTextVstupu.KontrolaUsernameANazvuAut(ZnackaNovehoAutaTB.Text))
            {
                MessageBox.Show("Prosím používejte znaky české abecedy, pomlčky a čísla - jiné znaky jsou ve značce auta zakázány", "ERROR");
            }
            if (!KontrolaTextVstupu.KontrolaUsernameANazvuAut(ModelNovehoAutaTB.Text))
            {
                MessageBox.Show("Prosím používejte znaky české abecedy, pomlčky a čísla - jiné znaky jsou v názvu modelu auta zakázány", "ERROR");
            }
            if (!KontrolaTextVstupu.KontrolaJmen(TypNovehoAutaTB.Text))
            {
                MessageBox.Show("Prosím používejte znaky české abecedy a pomlčky - jiné znaky jsou zakázány v popisu typu auta.", "ERROR");
            }


            double spotrebaD = 0;

            if (ModelNovehoAutaTB.Text.Length != 0 && ZnackaNovehoAutaTB.Text.Length != 0 && TypNovehoAutaTB.Text.Length != 0)
            {
                if (double.TryParse(SpotrebaNovehoAutaTB.Text, out spotrebaD))
                {
                    spotrebaD = double.Parse(SpotrebaNovehoAutaTB.Text);
                    if (spotrebaD <= 0)
                    {
                        MessageBox.Show("Spotřeba nesmí být menší nebo rovna než 0", "ERROR");
                        return;
                    }
                }
                else
                {
                    MessageBox.Show("Spotřeba musí být desetinné číslo", "ERROR");
                    return;
                }
            }
            else
            {
                MessageBox.Show("Model, značka či typ je prázdný - toto nesmí nastat", "ERROR");
                return;
            }

            Auto noveAuto = new Auto(idNovehoAuta, ZnackaNovehoAutaTB.Text, ModelNovehoAutaTB.Text, TypNovehoAutaTB.Text, spotrebaD, "D", "-", listNakladuNovehoAuta);

            PromenneProVsechnyForms.AutaList.Add(noveAuto);
            MessageBox.Show("Auto úspěšně přidáno do systému - pokud chcete můžete zavřít toto okno, přidat další auto, či dokonce otevřít správce nákladů v systému", "SUCCESS");
            RefreashListBox();
        }
        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 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("");
        }