/// <summary>
        /// Получает содержимое файла по указанному пути, и читает из него сведения о городе.
        /// Если не удалось прочитать, то возвращает null.
        /// </summary>
        /// <param name="inputFilePath">Путь ко входному файлу, откуда нужно прочитать информацию о городе.</param>
        /// <returns>Данные о городе, либо null, если не удалось прочитать.</returns>
        private static CityInputInfo ReadCityInputInfoFromFile(string inputFilePath)
        {
            if (!File.Exists(inputFilePath))
            {
                Console.WriteLine("Не удается найти входной файл по указанному пути.");
                return(null);
            }

            string inputFileContent;

            try
            {
                inputFileContent = File.ReadAllText(inputFilePath);
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
                return(null);
            }

            CityInputInfo cityInputInfo = CityInputInfo.Deserialize(inputFileContent);

            if (cityInputInfo == null)
            {
                Console.WriteLine("Не удалось обработать файл.");
                return(null);
            }
            return(cityInputInfo);
        }
        /// <summary>
        /// Осуществляет «постройку» города, исходя из полученной в <paramref name="cityInputInfo"/> информации.
        /// </summary>
        /// <param name="cityInputInfo">Информация о городе, который нужно «построить».</param>
        /// <returns>Объект «построенного» города.</returns>
        private static City BuildCity(CityInputInfo cityInputInfo)
        {
            City city = new City(cityInputInfo.TopLeftCorner, cityInputInfo.BottomRightCorner, new RandomBuilder());

            foreach (var point2DPair in cityInputInfo.Roads)
            {
                city.AddRoad(new Road(point2DPair.Item1, point2DPair.Item2));
            }

            return(city);
        }
        public static void Main(string[] args)
        {
            string inputFilePath;

            if (args.Length < 2)
            {
                Console.WriteLine("Пожалуйста, укажите путь к входному файлу.");
                inputFilePath = Console.ReadLine();
            }
            else
            {
                inputFilePath = args[1];
            }

            CityInputInfo cityInputInfo = ReadCityInputInfoFromFile(inputFilePath);

            if (cityInputInfo == null)
            {
                return;
            }

            City city = BuildCity(cityInputInfo);

            Console.WriteLine("Городские дороги: ");
            foreach (Road road in city.Roads)
            {
                Console.WriteLine(road.ToString());
            }

            while (true)
            {
                if (!TryAskStartPoint(city, out var startPoint))
                {
                    return;
                }
                if (!TryAskEndPoint(out var institutionType))
                {
                    return;
                }

                CityPathInfo pathInfo = Finder.FindPathTo(city, startPoint, institutionType);

                if (pathInfo.IsEmptyPath())
                {
                    Console.WriteLine("Не удалось найти путь.");
                    return;
                }

                Console.WriteLine($"Путь найден: {pathInfo}. Общая продолжительность {pathInfo.TotalLength}");
                Console.WriteLine("Нажмите любую клавишу для продолжения...");
                Console.ReadKey();
            }
        }