//LoadBtn_Click: Loads Trains and Bookings from a file and adjust TrainFactory
        private void LoadBtn_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog load_window = new OpenFileDialog();

            load_window.Filter = "DAT File|*.dat";
            load_window.Title  = "Load Rail Network data";
            load_window.ShowDialog();

            Combined loaded = null;

            if (!string.IsNullOrEmpty(load_window.FileName))
            {
                try
                {
                    loaded = TrainFacade.DeserializePair((FileStream)load_window.OpenFile());
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }
            }
            else
            {
                return;
            }

            Trains   = loaded.Trains;
            Bookings = loaded.Bookings;
            //TrainFactory needs to be rebuilt because TrainFactory context is not serialized
            TrainFactory.Records = new Dictionary <string, List <string> >();
            if (Bookings.Count == 0)
            {
                foreach (Train t in Trains)
                {
                    TrainFactory.Records.Add(t.TrainID, new List <string>());
                }
            }
            else
            {
                foreach (Booking b in Bookings)
                {
                    if (!TrainFactory.Records.ContainsKey(b.TrainID))
                    {
                        TrainFactory.Records.Add(b.TrainID, new List <string> {
                            $"{b.Coach}{b.Seat.ToString()}"
                        });
                    }
                    else
                    {
                        TrainFactory.Records[b.TrainID].Add(b.Coach + b.Seat.ToString());
                    }
                }
            }

            MessageBox.Show("Loaded!");
        }
        public void TrainFacadeReturnsProperTrainTest()
        {
            var trainFacade = new TrainFacade();
            var train       = trainFacade.CreateTrain(1997, "Audi", 300, 300, Guid.NewGuid(), Color.Pink, EngineType.Diesel);

            Assert.AreEqual(train.ProductionYear, 1997);
            Assert.AreEqual(train.Brand, "Audi");
            Assert.AreEqual(train.KerbWeight, 300);
            Assert.AreEqual(train.MaxVelocity, 300);
            Assert.AreEqual(train.Color, Color.Pink);
            Assert.AreEqual(train.EngineType, EngineType.Diesel);
        }
        //SaveBtn_Click: Saves runtime Trains and Bookings as a file
        private void SaveBtn_Click(object sender, RoutedEventArgs e)
        {
            SaveFileDialog save_window = new SaveFileDialog();

            save_window.Filter = "DAT File|*.dat";
            save_window.Title  = "Save Rail Network data";
            save_window.ShowDialog();

            if (!string.IsNullOrEmpty(save_window.FileName))
            {
                try
                {
                    TrainFacade.SerializePair(new Combined(Trains, Bookings), (FileStream)save_window.OpenFile());
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }
            }

            MessageBox.Show("Saved!");
        }