public void UkloniElektricniAutomobil(ElektricniAutomobil a)
        {
            string query = "DELETE FROM Automobili WHERE JedinstvenoIme = '" + a.JedinstvenoIme + "'";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                }

            query = "DELETE FROM Baterije WHERE AutomobilJedinstvenoIme = '" + a.JedinstvenoIme + "'";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                }

            App.Current.Dispatcher.Invoke((System.Action) delegate
            {
                MainWindow.ElektricniAutomobili.Remove(a);
                MainWindow.autoBaterije.Remove(a.BaterijaAuta);
            });
        }
        public void DodajElektricniAutomobil(ElektricniAutomobil automobil)
        {
            bool sadrzi = false;

            foreach (ElektricniAutomobil e in MainWindow.ElektricniAutomobili)
            {
                if (e.JedinstvenoIme == automobil.JedinstvenoIme)
                {
                    sadrzi = true;
                    break;
                }
            }
            if (!sadrzi)
            {
                if (repozitorijum == null)
                {
                    repozitorijum = new ElektricniAutomobilRepozitorijum();
                }
                if (baterijaRepozitorijum == null)
                {
                    baterijaRepozitorijum = new BaterijaRepozitorijum();
                }
                repozitorijum.DodajElektricniAutomobil(automobil);
                //DodajBateriju(automobil.BaterijaAuta, true, automobil.JedinstvenoIme);
                BaterijaServer bs = new BaterijaServer(baterijaRepozitorijum);
                bs.DodajBateriju(automobil.BaterijaAuta, true, automobil.JedinstvenoIme);
            }
        }
        public void DodajElektricniAutomobil(ElektricniAutomobil automobil)
        {
            int naPunjacu = 0;

            if (automobil.NaPunjacu)
            {
                naPunjacu = 1;
            }
            int puniSe = 0;

            if (automobil.PuniSe)
            {
                puniSe = 1;
            }
            string query = $"INSERT INTO Automobili VALUES (@jedinstvenoIme, {naPunjacu}, {puniSe})";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    connection.Open();
                    command.Parameters.AddWithValue("@jedinstvenoIme", automobil.JedinstvenoIme);
                    command.ExecuteNonQuery();
                }
            App.Current.Dispatcher.Invoke((System.Action) delegate
            {
                MainWindow.ElektricniAutomobili.Add(automobil);
            });
        }
 public void ElektricniAutomobilKonstruktor2LosiParametri(Baterija baterija, string jedinstvenoIme, bool naPunjacu, bool puniSe)
 {
     Assert.Throws <ArgumentException>(() =>
     {
         ElektricniAutomobil automobil = new ElektricniAutomobil(baterija, jedinstvenoIme, naPunjacu, puniSe);
     }
                                       );
 }
 public void ElektricniAutomobilKonstruktor1LosiParametri(string jedinstvenoIme, double maksimalnaSnaga, double kapacitet, int brojBaterije)
 {
     Assert.Throws <ArgumentException>(() =>
     {
         ElektricniAutomobil automobil = new ElektricniAutomobil(jedinstvenoIme, maksimalnaSnaga, kapacitet, brojBaterije);
     }
                                       );
 }
        public void ElektricniAutomobilKonstruktor2DobriParametri(Baterija baterija, string jedinstvenoIme, bool naPunjacu, bool puniSe)
        {
            ElektricniAutomobil elektricniAutomobil = new ElektricniAutomobil(baterija, jedinstvenoIme, naPunjacu, puniSe);

            Assert.AreEqual(elektricniAutomobil.JedinstvenoIme, jedinstvenoIme);
            Assert.AreEqual(elektricniAutomobil.BaterijaAuta, baterija);
            Assert.AreEqual(elektricniAutomobil.NaPunjacu, naPunjacu);
            Assert.AreEqual(elektricniAutomobil.PuniSe, puniSe);
        }
        public void ElektricniAutomobilKonstruktor1DobriParametri(string jedinstvenoIme, double maksimalnaSnaga, double kapacitet, int brojBaterije)
        {
            ElektricniAutomobil elektricniAutomobil = new ElektricniAutomobil(jedinstvenoIme, maksimalnaSnaga, kapacitet, brojBaterije);

            Assert.AreEqual(elektricniAutomobil.JedinstvenoIme, jedinstvenoIme);
            Assert.AreEqual(elektricniAutomobil.BaterijaAuta.MaksimalnaSnaga, maksimalnaSnaga);
            Assert.AreEqual(elektricniAutomobil.BaterijaAuta.Kapacitet, kapacitet);
            Assert.AreEqual(elektricniAutomobil.BaterijaAuta.JedinstvenoIme, "BaterijaAuta" + brojBaterije.ToString());
            Assert.AreEqual(false, elektricniAutomobil.NaPunjacu);
            Assert.AreEqual(false, elektricniAutomobil.PuniSe);
        }
        public void DodajElektricniAutomobilDobarTest(ElektricniAutomobil automobil)
        {
            bool izvrseno = true;
            int  count    = -1;

            elektricniAutomobilServer.DodajElektricniAutomobil(automobil);

            count = ((FakeElektricniAutomobilRepozitorijum)repozitorijum).automobili.Count;
            Assert.AreEqual(true, izvrseno);
            Assert.AreEqual(1, count);
        }
        public void IskljuciSaPunjaca(ElektricniAutomobil a)
        {
            string query = "UPDATE Automobili SET NaPunjacu=@up  WHERE JedinstvenoIme = '" + a.JedinstvenoIme + "'";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    command.Parameters.Add("@up", SqlDbType.Bit).Value = false;
                    connection.Open();
                    command.ExecuteNonQuery();
                }
        }
        public void PokreniPunjenje(ElektricniAutomobil e)
        {
            string query = "UPDATE Automobili SET Punise=@up  WHERE JedinstvenoIme = '" + e.JedinstvenoIme + "'";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    command.Parameters.Add("@up", SqlDbType.Bit).Value = true;
                    connection.Open();
                    command.ExecuteNonQuery();
                }
        }
        public void PostavljanjeKapacitetaAuta(ElektricniAutomobil e, int trenutniKapacitet)
        {
            int i = 0;

            foreach (ElektricniAutomobil automobil in automobili)
            {
                if (automobil.JedinstvenoIme == e.JedinstvenoIme)
                {
                    automobil.BaterijaAuta.TrenutniKapacitet = trenutniKapacitet;
                    break;
                }
                i++;
            }
        }
        public void UkloniElektricniAutomobil(ElektricniAutomobil a)
        {
            int i = 0;

            foreach (ElektricniAutomobil automobil in automobili)
            {
                if (automobil.JedinstvenoIme == a.JedinstvenoIme)
                {
                    automobili.RemoveAt(i);
                    break;
                }
                i++;
            }
        }
        public void UkljuciNaPunjac(ElektricniAutomobil e)
        {
            int i = 0;

            foreach (ElektricniAutomobil automobil in automobili)
            {
                if (automobil.JedinstvenoIme == e.JedinstvenoIme)
                {
                    automobil.NaPunjacu = true;
                    break;
                }
                i++;
            }
        }
        public void PokreniPunjenje(ElektricniAutomobil e)
        {
            int i = 0;

            puniSePunjac = true;
            foreach (ElektricniAutomobil automobil in automobili)
            {
                if (automobil.JedinstvenoIme == e.JedinstvenoIme)
                {
                    automobil.PuniSe = true;
                    break;
                }
                i++;
            }
        }
        public void UkljuciNaPunjac(ElektricniAutomobil a)
        {
            MainWindow.Punjac.NaPunjacu = true;
            MainWindow.Punjac.Automobil = a;
            a.NaPunjacu = true;
            string query = "UPDATE Automobili SET NaPunjacu=@up  WHERE JedinstvenoIme = '" + a.JedinstvenoIme + "'";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    command.Parameters.Add("@up", SqlDbType.Bit).Value = true;
                    connection.Open();
                    command.ExecuteNonQuery();
                }
        }
        public void IskljuciSaPunjaca(ElektricniAutomobil e)
        {
            int i = 0;

            foreach (ElektricniAutomobil automobil in automobili)
            {
                if (automobil.JedinstvenoIme == e.JedinstvenoIme)
                {
                    automobil.NaPunjacu = false;
                    automobil.PuniSe    = false;
                    break;
                }
                i++;
            }
        }
        public void ZaustaviPunjenje(ElektricniAutomobil e)
        {
            int i = 0;

            puniSePunjac = false;
            foreach (ElektricniAutomobil automobil in automobili)
            {
                if (automobil.JedinstvenoIme == e.JedinstvenoIme)
                {
                    automobil.PuniSe = false;
                    break;
                }
                i++;
            }
        }
        public void DodajElektricniAutomobilLosTest(ElektricniAutomobil automobil)
        {
            MainWindow.ElektricniAutomobili.Add(automobil);
            ((FakeElektricniAutomobilRepozitorijum)repozitorijum).automobili.Add(automobil);
            bool izvrseno = true;
            int  count    = -1;

            try
            {
                elektricniAutomobilServer.DodajElektricniAutomobil(automobil);
            }
            catch
            {
                izvrseno = false;
            }
            count = ((FakeElektricniAutomobilRepozitorijum)repozitorijum).automobili.Count;
            Assert.AreEqual(true, izvrseno);
            Assert.AreEqual(1, count);
        }
        public void UcitajUredjaje()
        {
            string queryDatumVreme = "SELECT * FROM Vreme WHERE SnagaSunca IS NULL";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(queryDatumVreme, connection))
                    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                    {
                        DataTable table = new DataTable();
                        adapter.Fill(table);

                        if (table.Rows.Count == 0)
                        {
                            MainWindow.trenutnoVreme = DateTime.Now;
                            connection.Open();
                            command.CommandText = $"INSERT INTO Vreme Values(@id, @vreme, NULL)";
                            command.Parameters.AddWithValue("@id", "DatumVreme");
                            command.Parameters.AddWithValue("vreme", MainWindow.trenutnoVreme);
                            command.ExecuteNonQuery();
                        }
                        for (int i = 0; i < table.Rows.Count; i++)
                        {
                            string id = table.Rows[i]["Id"].ToString();
                            MainWindow.trenutnoVreme = DateTime.Parse(table.Rows[i]["DatumVreme"].ToString());
                        }
                    }

            string querySnagaSunca = "SELECT * FROM Vreme WHERE DatumVreme IS NULL";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(querySnagaSunca, connection))
                    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                    {
                        DataTable table = new DataTable();
                        adapter.Fill(table);

                        if (table.Rows.Count == 0)
                        {
                            MainWindow.SnagaSunca = 0;
                        }
                        for (int i = 0; i < table.Rows.Count; i++)
                        {
                            string id = table.Rows[i]["Id"].ToString();
                            MainWindow.SnagaSunca = int.Parse(table.Rows[i]["SnagaSunca"].ToString());
                        }
                    }

            string queryDatum = "SELECT * FROM Graf WHERE Datum = @Datum and Sat = @Sat";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(queryDatum, connection))
                    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                    {
                        DataTable table = new DataTable();
                        command.Parameters.AddWithValue("@Datum", MainWindow.trenutnoVreme.Date);
                        command.Parameters.AddWithValue("@Sat", MainWindow.trenutnoVreme.Hour + 1);
                        adapter.Fill(table);

                        if (table.Rows.Count > 0)
                        {
                            MainWindow.baterije        = double.Parse(table.Rows[0]["Baterije"].ToString()) * (-1);
                            MainWindow.distribucijaSat = double.Parse(table.Rows[0]["Distribucija"].ToString()) * (-1);
                            MainWindow.solarniPaneli   = double.Parse(table.Rows[0]["SolarniPaneli"].ToString()) * (-1);
                            MainWindow.potrosaci       = double.Parse(table.Rows[0]["Potrosaci"].ToString()) * (-1);
                        }
                        else
                        {
                            MainWindow.baterije        = 0;
                            MainWindow.distribucijaSat = 0;
                            MainWindow.solarniPaneli   = 0;
                            MainWindow.potrosaci       = 0;
                        }
                    }

            string queryBaterije = "SELECT * FROM Baterije WHERE AutomobilJedinstvenoIme IS NULL";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(queryBaterije, connection))
                    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                    {
                        DataTable table = new DataTable();
                        adapter.Fill(table);

                        for (int i = 0; i < table.Rows.Count; i++)
                        {
                            string   jedinstvenoIme    = table.Rows[i]["JedinstvenoIme"].ToString();
                            double   maksimalnaSnaga   = double.Parse(table.Rows[i]["MaksimalnaSnaga"].ToString());
                            double   kapacitet         = double.Parse(table.Rows[i]["Kapacitet"].ToString());
                            bool     puniSe            = bool.Parse(table.Rows[i]["PuniSe"].ToString());
                            bool     prazniSe          = bool.Parse(table.Rows[i]["PrazniSe"].ToString());
                            double   trenutniKapacitet = double.Parse(table.Rows[i]["TrenutniKapacitet"].ToString());
                            Baterija novaBaterija      = new Baterija(jedinstvenoIme, maksimalnaSnaga, kapacitet);
                            novaBaterija.PuniSe            = puniSe;
                            novaBaterija.PrazniSe          = prazniSe;
                            novaBaterija.TrenutniKapacitet = trenutniKapacitet;
                            if (novaBaterija.TrenutniKapacitet == 0)
                            {
                                novaBaterija.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery0;
                            }
                            else if (novaBaterija.TrenutniKapacitet > 0 && novaBaterija.TrenutniKapacitet <= novaBaterija.Kapacitet * 20 / 100)
                            {
                                novaBaterija.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery10;
                            }
                            else if (novaBaterija.TrenutniKapacitet > novaBaterija.Kapacitet * 20 / 100 && novaBaterija.TrenutniKapacitet <= novaBaterija.Kapacitet * 40 / 100)
                            {
                                novaBaterija.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery30;
                            }
                            else if (novaBaterija.TrenutniKapacitet > novaBaterija.Kapacitet * 40 / 100 && novaBaterija.TrenutniKapacitet <= novaBaterija.Kapacitet * 60 / 100)
                            {
                                novaBaterija.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery50;
                            }
                            else if (novaBaterija.TrenutniKapacitet > novaBaterija.Kapacitet * 60 / 100 && novaBaterija.TrenutniKapacitet <= novaBaterija.Kapacitet * 80 / 100)
                            {
                                novaBaterija.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery70;
                            }
                            else if (novaBaterija.TrenutniKapacitet > novaBaterija.Kapacitet * 80 / 100 && novaBaterija.TrenutniKapacitet <= novaBaterija.Kapacitet * 95 / 100)
                            {
                                novaBaterija.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery90;
                            }
                            else
                            {
                                novaBaterija.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery100;
                            }
                            MainWindow.Baterije.Add(novaBaterija);
                        }
                    }

            queryBaterije = "SELECT * FROM Baterije WHERE AutomobilJedinstvenoIme IS NOT NULL";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(queryBaterije, connection))
                    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                    {
                        DataTable table = new DataTable();
                        adapter.Fill(table);

                        for (int i = 0; i < table.Rows.Count; i++)
                        {
                            string   jedinstvenoIme     = table.Rows[i]["JedinstvenoIme"].ToString();
                            double   maksimalnaSnaga    = double.Parse(table.Rows[i]["MaksimalnaSnaga"].ToString());
                            double   kapacitet          = double.Parse(table.Rows[i]["Kapacitet"].ToString());
                            string   autoJedinstvenoIme = table.Rows[i]["AutomobilJedinstvenoIme"].ToString();
                            bool     puniSe             = bool.Parse(table.Rows[i]["PuniSe"].ToString());
                            bool     prazniSe           = bool.Parse(table.Rows[i]["PrazniSe"].ToString());
                            double   trenutniKapacitet  = double.Parse(table.Rows[i]["TrenutniKapacitet"].ToString());
                            Baterija novaBaterija       = new Baterija(jedinstvenoIme, maksimalnaSnaga, kapacitet);
                            novaBaterija.PuniSe   = puniSe;
                            novaBaterija.PrazniSe = prazniSe;
                            novaBaterija.AutomobilJedinstvenoIme = autoJedinstvenoIme;
                            novaBaterija.TrenutniKapacitet       = trenutniKapacitet;
                            MainWindow.autoBaterije.Add(novaBaterija);
                        }
                    }

            string queryPotrosaci = "SELECT * FROM Potrosaci";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(queryPotrosaci, connection))
                    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                    {
                        DataTable table = new DataTable();
                        adapter.Fill(table);

                        for (int i = 0; i < table.Rows.Count; i++)
                        {
                            string   jedinstvenoIme = table.Rows[i]["JedinstvenoIme"].ToString();
                            double   potrosnja      = double.Parse(table.Rows[i]["Potrosnja"].ToString());
                            bool     stanje         = bool.Parse(table.Rows[i]["Upaljen"].ToString());
                            Potrosac novi           = new Potrosac(jedinstvenoIme, potrosnja);
                            novi.Upaljen = stanje;
                            if (stanje)
                            {
                                novi.Slika = MaterialDesignThemes.Wpf.PackIconKind.PowerPlugOutline;
                            }
                            MainWindow.Potrosaci.Add(novi);
                        }
                    }

            string querySolarniPaneli = "SELECT * FROM SolarnePanele";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(querySolarniPaneli, connection))
                    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                    {
                        DataTable table = new DataTable();
                        adapter.Fill(table);

                        for (int i = 0; i < table.Rows.Count; i++)
                        {
                            string       jedinstvenoIme  = table.Rows[i]["JedinstvenoIme"].ToString();
                            double       maksimalnaSnaga = double.Parse(table.Rows[i]["MaksimalnaSnaga"].ToString());
                            SolarniPanel novi            = new SolarniPanel(jedinstvenoIme, maksimalnaSnaga);
                            MainWindow.SolarniPaneli.Add(novi);
                        }
                    }

            string queryAutomobil = "SELECT * FROM Automobili";

            using (connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(queryAutomobil, connection))
                    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                    {
                        DataTable table = new DataTable();
                        adapter.Fill(table);

                        for (int i = 0; i < table.Rows.Count; i++)
                        {
                            string              jedinstvenoIme = table.Rows[i]["JedinstvenoIme"].ToString();
                            bool                naPunjacu      = bool.Parse(table.Rows[i]["NaPunjacu"].ToString());
                            bool                puniSe         = bool.Parse(table.Rows[i]["Punise"].ToString());
                            Baterija            baterija       = MainWindow.autoBaterije.Find(b => b.AutomobilJedinstvenoIme.Equals(jedinstvenoIme));
                            ElektricniAutomobil noviAuto       = new ElektricniAutomobil(baterija, jedinstvenoIme, naPunjacu, puniSe);

                            if (naPunjacu == true)
                            {
                                MainWindow.Punjac.Automobil = noviAuto;
                                MainWindow.Punjac.NaPunjacu = true;
                                if (puniSe == true)
                                {
                                    MainWindow.Punjac.PuniSe = true;
                                }
                            }

                            if (noviAuto.BaterijaAuta.TrenutniKapacitet == 0)
                            {
                                noviAuto.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery0;
                            }
                            else if (noviAuto.BaterijaAuta.TrenutniKapacitet > 0 && noviAuto.BaterijaAuta.TrenutniKapacitet <= noviAuto.BaterijaAuta.Kapacitet * 20 / 100)
                            {
                                noviAuto.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery10;
                            }
                            else if (noviAuto.BaterijaAuta.TrenutniKapacitet > noviAuto.BaterijaAuta.Kapacitet * 20 / 100 && noviAuto.BaterijaAuta.TrenutniKapacitet <= noviAuto.BaterijaAuta.Kapacitet * 40 / 100)
                            {
                                noviAuto.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery30;
                            }
                            else if (noviAuto.BaterijaAuta.TrenutniKapacitet > noviAuto.BaterijaAuta.Kapacitet * 40 / 100 && noviAuto.BaterijaAuta.TrenutniKapacitet <= noviAuto.BaterijaAuta.Kapacitet * 60 / 100)
                            {
                                noviAuto.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery50;
                            }
                            else if (noviAuto.BaterijaAuta.TrenutniKapacitet > noviAuto.BaterijaAuta.Kapacitet * 60 / 100 && noviAuto.BaterijaAuta.TrenutniKapacitet <= noviAuto.BaterijaAuta.Kapacitet * 80 / 100)
                            {
                                noviAuto.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery70;
                            }
                            else if (noviAuto.BaterijaAuta.TrenutniKapacitet > noviAuto.BaterijaAuta.Kapacitet * 80 / 100 && noviAuto.BaterijaAuta.TrenutniKapacitet <= noviAuto.BaterijaAuta.Kapacitet * 95 / 100)
                            {
                                noviAuto.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery90;
                            }
                            else
                            {
                                noviAuto.Slika = MaterialDesignThemes.Wpf.PackIconKind.Battery100;
                            }
                            MainWindow.ElektricniAutomobili.Add(noviAuto);
                        }
                    }
        }
 public void DodajElektricniAutomobil(ElektricniAutomobil automobil)
 {
     automobili.Add(automobil);
 }
 public void PostavljanjeKapacitetaAuta(ElektricniAutomobil e, int trenutniKapacitet)
 {
     e.BaterijaAuta.TrenutniKapacitet = trenutniKapacitet;
 }