public (FlightModel Flight, TimeSpan FlightTime) FindBestFlight(DepartureDays dayOfDeparture, TimeSpan timeOfDeparture)
        {
            var minTime           = TimeSpan.MaxValue;
            var flightWithMinTime = new FlightModel();


            foreach (var flight in Flights)
            {
                var timeUntilEndOfFlight = TimeUntilEndOfFlight(flight, dayOfDeparture, timeOfDeparture);
                if (timeUntilEndOfFlight < minTime)
                {
                    minTime           = timeUntilEndOfFlight;
                    flightWithMinTime = flight;
                }
            }
            return(flightWithMinTime, minTime);
        }
        private TimeSpan TimeUntilEndOfFlight(FlightModel flight, DepartureDays dayOfDeparture, TimeSpan timeOfDeparture)
        {
            int           daysUntilFlight  = default;
            DepartureDays nearestFlightDay = dayOfDeparture;

            if (timeOfDeparture >= flight.DepartureTime)
            {
                GoToNextDay(ref nearestFlightDay, ref daysUntilFlight);
            }

            while (!flight.DeparturesDays.Contains(nearestFlightDay))
            {
                GoToNextDay(ref nearestFlightDay, ref daysUntilFlight);
            }

            return(new TimeSpan(daysUntilFlight, 0, 0, 0) + (flight.DepartureTime - timeOfDeparture) + flight.TakeTimeInAir());
        }