public void AddFlightRoute(string src, string dest)
        {
            using (var context = new Model1Container())
            {
                var ariportRoute = new Flight_Route() { SourceCode = src, DestinationCode = dest };

                context.AddToFlight_Route(ariportRoute);

                context.SaveChanges();
            }
        }
        public void BookTicket(int customerId, ReservationTicket ticket)
        {
            using (var context = new Model1Container())
            {
                if (ticket.MealId == 0)
                {
                    ticket.MealId = 1;
                }

                var cusomter = context.Passengers.Where(p => p.Id == customerId).Single();
                var ticket_table = new Ticket
                {
                    IsCancelled = false,
                    MealId = ticket.MealId,
                    PricePaid = ticket.PricePaid,
                    SeatId = ticket.SeatId,
                    TicketedTime = DateTime.Now,
                    PassengerId = customerId

                };
                ticket_table.Meal_Preference = new Meal_Preference { Id = ticket.MealId, MealType = "Veg" };
                cusomter.Tickets.Add(ticket_table);

                var seat = context.Fligt_Leg_Seat_Assignment.Where(p => p.Id == ticket.SeatId).Single();
                seat.IsAvailable = false;

                var flightLeg = context.Flight_Leg.Where(p => p.Id == ticket.FlightLegId).Single();
                flightLeg.AvailableSeats = flightLeg.AvailableSeats - 1;

                context.SaveChanges();

            }
        }
        public List<Customer> SaveCustomers(List<Customer> customers)
        {
            using (var context = new Model1Container())
            {
                foreach (var customer in customers)
                {
                    context.Passengers.AddObject(new Passenger
                    {
                        FirstName = customer.FirstName,
                        LastName = customer.LastName,
                        DateofBirth = customer.DateOfBirth,
                        email = customer.Email,
                        address = customer.Address,
                        phone = customer.Phone
                    });
                }

                context.SaveChanges();

                foreach (var item in context.Passengers)
                {
                   var customer = customers.SingleOrDefault(p => p.FirstName.Equals(item.FirstName) && p.LastName.Equals(item.LastName) && p.DateOfBirth.Date == item.DateofBirth.Date);
                   if (customer != null)
                   {
                       customer.Id = item.Id;
                   }
                }

            }

            return customers;
        }
        public int SearchRoute(string srcAirportCode, string destAirportCode)
        {
            int routeCode = -1;
            using (var context = new Model1Container())
            {
               var flightRoute = context.Flight_Route.Where(p => p.SourceCode.Equals(srcAirportCode, StringComparison.OrdinalIgnoreCase) && p.DestinationCode.Equals(destAirportCode, StringComparison.OrdinalIgnoreCase)).SingleOrDefault();

               if (flightRoute != null)
               {
                   routeCode = flightRoute.Id;
               }
            }

            return routeCode;
        }
        public List<FlightSeat> GetFlightSeats(int flightLegId)
        {
            List<FlightSeat> flightSeats = null;
            using (var context = new Model1Container())
            {
                var flight_seats = context.Fligt_Leg_Seat_Assignment.Where(p => p.Flight_Leg_Id == flightLegId);

                if (flight_seats != null)
                {
                    flightSeats = new List<FlightSeat>();
                    foreach (var seat in flight_seats)
                    {
                        var flightSeat = new FlightSeat()
                        {
                             Id = seat.Id,
                             FlightLegId = flightLegId,
                             IsAvailable = seat.IsAvailable,
                             IsCurrentSelection = false,
                             SeatingClass = seat.SeatingClass,
                             SeatingType = seat.SeatType,
                             SeatNumber = seat.SeatNumber

                        };

                        flightSeats.Add(flightSeat);
                    }
                }
            }
            return flightSeats;
        }
        public List<Meal> GetMealPreferences()
        {
            List<Meal> meals = new List<Meal>();
            using (var context = new Model1Container())
            {
                var meal_pref = from p in context.Meal_Preference select p;

                foreach (var item in meal_pref)
                {
                    meals.Add(new Meal { Id = item.Id, MealType = item.MealType });
                }

            }

            return meals;
        }
        public List<Customer> GetFlightPassengers(FlightLeg flightLeg)
        {
            List<Customer> customers = new List<Customer>();
            using (var context = new Model1Container())
            {
                List<Passenger> passengers = new List<Passenger>();
                List<Ticket> tickets = new List<Ticket>();
                var flightSeats = from  p in context.Fligt_Leg_Seat_Assignment  where
                    ( p.Flight_Leg_Id == flightLeg.Id && !p.IsAvailable) select p.Id;

                foreach (var seatId in flightSeats)
                {
                    var ticket = context.Tickets.Where(p => p.SeatId == seatId).SingleOrDefault();
                    if (ticket != null)
                    {
                        tickets.Add(ticket);
                    }
                }

                foreach (var ticket in tickets)
                {
                    var passenger = context.Passengers.Where(p => p.Id == ticket.PassengerId).SingleOrDefault();
                    if (passenger != null)
                    {
                        passengers.Add(passenger);
                    }
                }

                foreach (var passenger in passengers)
                {
                    customers.Add(new Customer
                    { FirstName = passenger.FirstName,
                        LastName = passenger.LastName,
                        Id = passenger.Id,
                         Email = passenger.email,
                          Phone = passenger.phone,
                          Address = passenger.address,
                          DateOfBirth = passenger.DateofBirth
                    });

                }
            }
            return customers;
        }
        public List<FlightRoute> GetFlightRoutes()
        {
            List<FlightRoute> flightRoutes = new List<FlightRoute>();
            using (var context = new Model1Container())
            {
                var dbFlightRoutes = context.Flight_Route.Where(p => p.Id != null);

                foreach (var item in dbFlightRoutes)
                {
                    FlightRoute flightRoute = new FlightRoute() { Id = item.Id, DestinationCode = item.DestinationCode, SourceCode = item.SourceCode };
                    flightRoutes.Add(flightRoute);
                }
            }

            return flightRoutes;
        }
        public List<FlightLeg> GetFlightLegs(int flightRouteId)
        {
            List<FlightLeg> flightLegs = null;
            using (var context = new Model1Container())
            {
                var flight_legs = context.Flight_Leg.Where(p => p.Flight_Route_Id == flightRouteId);

                if (flight_legs != null)
                {
                    flightLegs = new List<FlightLeg>();
                    foreach (var leg in flight_legs)
                    {
                        var flightLeg = new FlightLeg()
                        {
                            FlightNumber = leg.FlightNumber,
                            TravelDate = leg.Date,
                            ScheduledArrivalTime = leg.ScheduledArrivalTime,
                            ScheduledDepartureTime = leg.ScheduledDepartureTime,
                            Id = leg.Id,
                            Fare = leg.Fare,
                            AvailableSeats = leg.AvailableSeats
                        };

                        flightLegs.Add(flightLeg);
                    }
                }
            }
            return flightLegs;
        }
        public List<FlightLeg> GetFlightLegs()
        {
            List<FlightLeg> flightlegs = new List<FlightLeg>();
            using (var dataContext = new Model1Container())
            {
                var legs = from p in dataContext.Flight_Leg select p;

                foreach (var leg in legs)
                {
                    FlightLeg flightLeg = new FlightLeg
                    {
                        FlightNumber = leg.FlightNumber,
                        TravelDate = leg.Date,
                        ScheduledArrivalTime = leg.ScheduledArrivalTime,
                        ScheduledDepartureTime = leg.ScheduledDepartureTime,
                        Id = leg.Id,
                        Fare = leg.Fare,
                        AvailableSeats = leg.AvailableSeats,
                        FlightRouteId = leg.Flight_Route_Id
                    };
                    flightlegs.Add(flightLeg);
                }
            }
            return flightlegs;
        }
        public List<AirportInfo> GetAirports()
        {
            List<AirportInfo> airports = new List<AirportInfo>();

            using (var dataContext = new Model1Container())
            {
                var dbAirports = dataContext.Airports.Where(p => p.Code != null);

                foreach (var item in dbAirports)
                {
                    airports.Add(new AirportInfo { Id = item.Id, Name = item.Name, Code = item.Code, City = item.City, State = item.State });

                }

            }

            return airports;
        }
        public void AddFlightLeg(FlightLeg flightLeg)
        {
            var newFlightLeg = new Flight_Leg();

            using (var dataContext = new Model1Container())
            {

                newFlightLeg.AvailableSeats = flightLeg.SelectedPlane.NoOfSeats;
                newFlightLeg.Date = flightLeg.TravelDate;
                newFlightLeg.Fare = 300;
                newFlightLeg.IsCancelled = false;
                newFlightLeg.IsRescheduled = false;
                newFlightLeg.Flight_Route_Id = flightLeg.SelectedRoute.Id;
                newFlightLeg.FlightNumber = (short)flightLeg.FlightNumber;
                newFlightLeg.ScheduledDepartureTime = flightLeg.ScheduledDepartureTime;
                newFlightLeg.ScheduledArrivalTime = flightLeg.ScheduledArrivalTime;

                dataContext.Flight_Leg.AddObject(newFlightLeg);
                //dataContext.AddToFlight_Leg(newFlightLeg);
                dataContext.SaveChanges();

                for (int row = 0; row < flightLeg.SelectedPlane.TotalRows; row++)
                {

                    for (int col = 0; col < flightLeg.SelectedPlane.TotalColumns; col++)
                    {
                        string seatNumber = "";
                        if (col == 0)
                        {
                            seatNumber = string.Format("{0}{1}", row+1, "A");
                        }
                        if (col == 1)
                        {
                            seatNumber = string.Format("{0}{1}", row + 1, "B");
                        }
                        if (col == 2)
                        {
                            seatNumber = string.Format("{0}{1}", row + 1, "C");
                        }
                        if (col == 3)
                        {
                            seatNumber = string.Format("{0}{1}", row + 1, "D");
                        }
                        if (col == 4)
                        {
                            seatNumber = string.Format("{0}{1}", row + 1, "E");
                        }
                        if (col == 5)
                        {
                            seatNumber = string.Format("{0}{1}", row + 1, "F");
                        }

                        dataContext.AddToFligt_Leg_Seat_Assignment(new Fligt_Leg_Seat_Assignment { SeatingClass = "Economy", Flight_Leg_FlightNumber=newFlightLeg.FlightNumber, SeatNumber = seatNumber, Flight_Leg_Id = newFlightLeg.Id, IsAvailable = true, SeatType = "Normal" });

                        //dataContext.AddToFligt_Leg_Seat_Assignment(new Fligt_Leg_Seat_Assignment { SeatingClass = "Economy", Flight_Leg_Id = newFlightLeg.Id,  SeatNumber = seatNumber, IsAvailable = true, SeatType = "Normal" });
                    }

                }
                dataContext.SaveChanges();
            }
        }
        public List<Airplane> GetAirplanes()
        {
            List<Airplane> airPlanes = new List<Airplane>();
            using (var context = new Model1Container())
            {
                var dbAirplanes= context.Airplane_Info.Where(p => p.PlaneId != null);

                foreach (var item in dbAirplanes)
                {
                    Airplane airplane = new Airplane() { PlaneId = item.PlaneId,
                                                        NoOfSeats = item.NoOfSeats,
                                                        LeftColumns = Convert.ToInt32(item.NoOfLeftCol),
                                                        TotalColumns = Convert.ToInt32(item.NoOfColumns),
                                                        AirplaneNumber = item.PlaneId.ToString(),
                                                        Model = item.Model,
                                                        TotalRows = Convert.ToInt32(item.NoOfRows) };
                    airPlanes.Add(airplane);
                }
            }
            return airPlanes;
        }