static void LoopForFlowerOrStemType() { while (true) { Console.WriteLine("\nEnter command:"); var input = Console.ReadLine(); Console.WriteLine("---------------"); var parsedInput = ParseFlowerOrStemInput(input); switch (parsedInput) { case string command: switch (command) { case "AF": //All flower combinations var allFlowerFormulasAF = flowerCalculator.ReportAllOrdered(); allFlowerFormulasAF .ForEach(x => Console.WriteLine( $"{x.FlowerA.ToString()} + {x.FlowerB.ToString()} = {x.Result?.ToString()}{ComposeInProgressString(x.InProgress)}")); break; case "AP": //All stem combinations var allStemFormulasAF = stemCalculator.ReportAllOrdered(); allStemFormulasAF .ForEach(x => Console.WriteLine( $"{x.StemA.ToString()} + {x.StemB.ToString()} = {x.Result?.ToString()}{ComposeInProgressString(x.InProgress)}")); break; case "LF": //List flowers var allFlowerFormulas = flowerCalculator.ReportAllOrdered(); var allFlowerFormulasWithResult = allFlowerFormulas.Where(x => x.Result != null || x.InProgress).ToList(); var allFlowerFormulasWithEmptyResult = allFlowerFormulas.Where(x => x.Result == null && x.InProgress == false).ToList(); Console.WriteLine("\nWith result: -------"); allFlowerFormulasWithResult .ForEach(x => Console.WriteLine( $"{x.FlowerA.ToString()} + {x.FlowerB.ToString()} = {x.Result?.ToString()}{ComposeInProgressString(x.InProgress)}")); Console.WriteLine("\nWith no result: -------"); allFlowerFormulasWithEmptyResult .ForEach(x => Console.WriteLine($"{x.FlowerA.ToString()} + {x.FlowerB.ToString()}")); break; case "LP": //List stems var allStemFormulas = stemCalculator.ReportAllOrdered(); var allStemFormulasWithResult = allStemFormulas.Where(x => x.Result != null || x.InProgress).ToList(); var allStemFormulasWithEmptyResult = allStemFormulas.Where(x => x.Result == null && x.InProgress == false).ToList(); Console.WriteLine("\nWith result: -------"); allStemFormulasWithResult .ForEach(x => Console.WriteLine( $"{x.StemA.ToString()} + {x.StemB.ToString()} = {x.Result?.ToString()}{ComposeInProgressString(x.InProgress)}")); Console.WriteLine("\nWith no result: -------"); allStemFormulasWithEmptyResult .ForEach(x => Console.WriteLine($"{x.StemA.ToString()} + {x.StemB.ToString()}")); break; case "RF": //Reverse list flowers var resultFlowerFormulas = flowerCalculator.ReportAllOrderedByResult(); resultFlowerFormulas .ForEach(x => Console.WriteLine($"{x.Result.ToString()} <- {x.FlowerA.ToString()} + {x.FlowerB.ToString()}")); Console.WriteLine("\nElements with no formula:"); var flowerTypesWithNoFormula = flowerCalculator.ReportFlowerTypesWithNoFormula(); flowerTypesWithNoFormula .ForEach(x => Console.WriteLine($"{x.ToString()}")); break; case "RP": //Reverse list stems var resultStemFormulas = stemCalculator.ReportAllOrderedByResult(); resultStemFormulas .ForEach(x => Console.WriteLine($"{x.Result.ToString()} <- {x.StemA.ToString()} + {x.StemB.ToString()}")); Console.WriteLine("\nElements with no formula:"); var stemTypesWithNoFormula = stemCalculator.ReportStemTypesWithNoFormula(); stemTypesWithNoFormula .ForEach(x => Console.WriteLine($"{x.ToString()}")); break; case "SS": //Seed Storage var seeds = seedCalculator.ReportSeeds(); seeds .ForEach(x => Console.WriteLine($"{x.Flower.ToString()} {x.Stem.ToString()}")); break; case "RS": //Reverse seed Storage var seedsReverse = seedCalculator.ReportSeedsReverse(); seedsReverse .ForEach(x => Console.WriteLine($"{x.Flower.ToString()} {x.Stem.ToString()}")); break; case "UPDATE": //Update formulas ReseedFormulas(); break; default: Console.WriteLine("Wrong input"); break; } break; case FlowerType flowerType: var flowerFormulas = flowerCalculator.ReportForFlowerType(flowerType); flowerFormulas.ForEach(x => Console.WriteLine($"{x.FlowerA.ToString()} + {x.FlowerB.ToString()} = {x.Result?.ToString()}")); break; case StemType stemType: var stemFormulas = stemCalculator.ReportForStemType(stemType); stemFormulas.ForEach(x => Console.WriteLine($"{x.StemA.ToString()} + {x.StemB.ToString()} = {x.Result?.ToString()}")); break; default: Console.WriteLine("Wrong input"); break; } } }