//Tested
        private static void WriteOutputFile(OutPutFile outPut)
        {
            string createText = outPut.DeliveredPizza + Environment.NewLine;

            foreach (var op in outPut.Delivery)
            {
                var deliveredPizza = op.TeamType + " " + string.Join(" ", op.Pizza);
                createText += deliveredPizza + Environment.NewLine;
            }
            File.WriteAllText(path + fileName + "_Output.txt", createText);
        }
        static void Main(string[] args)
        {
            try
            {
                EvenMorePizza EvenMorePizza = ReadInputFile(path + fileName);

                OutPutFile outPutFile = UniqueIngPizzaDelivery(EvenMorePizza);

                WriteOutputFile(outPutFile);
            }
            catch (Exception exc) { Console.WriteLine(exc.Message); }
        }
        private static OutPutFile UniqueIngPizzaDelivery(EvenMorePizza evenMorePizza)
        {
            bool t4Fed = false;

            EvenMorePizza archivePizza = ObjectCopier.CloneJson(evenMorePizza);
            OutPutFile    outPutFile   = new OutPutFile();

            outPutFile.DeliveredPizza = 0;
            int totalPizza = evenMorePizza.AvailablePizza;

            List <Delivery> deliveries = new List <Delivery>();
            int             T2 = evenMorePizza.Team2ppl, T3 = evenMorePizza.Team3ppl, T4 = evenMorePizza.Team4ppl;
            int             NofTeams = evenMorePizza.Team2ppl + evenMorePizza.Team3ppl + evenMorePizza.Team4ppl;
            int             totalppl = (T2 * 2) + (T3 * 3) + (T4 * 4);

            if (totalPizza != totalppl)
            {
                int t4Ate = (totalPizza - (T4 * 4));
                t4Fed = t4Ate > 0;
                if (t4Ate >= (T3 * 3))
                {
                    int  t4t3Ate = (t4Ate - (T3 * 3));
                    bool t4t3Fed = t4t3Ate > 0;

                    int  t2Left = (T2 * 2);
                    bool t2Fed  = (totalPizza - (T2 * 2)) > 0;
                }
            }

            //-----
            int i = 0;

            //do
            {
                try
                {
                    totalPizza = evenMorePizza.Pizzas.Count;
                    Console.WriteLine("Pizza Left: " + totalPizza + "\n- - - - - - -\n");
                    totalppl = (evenMorePizza.Team2ppl * 2) + (T3 = evenMorePizza.Team3ppl * 3) + (evenMorePizza.Team4ppl * 4);
                    Console.WriteLine("Pizza PPL: " + totalppl + "\n- - - - - - -\n");
                    Console.WriteLine("evenMorePizza.Team4ppl\n- - - - - - -\n");
                }
                catch { }
                if (evenMorePizza.Team4ppl > 0 && (totalPizza > 0))
                {
                    int Team4pplIndex = 0;
                    do
                    {
                        var pizzads = new List <string>();

                        totalPizza = evenMorePizza.Pizzas.Count;
                        if ((totalPizza >= (4 * evenMorePizza.Team4ppl)) && (totalPizza % 4 >= 0))
                        {
                            List <int>    pizzaindx    = new List <int>();
                            List <string> LastPizzaIng = new List <string>();

                            var Pizza = GiveMePizza(pizzads, evenMorePizza, archivePizza, 4);
                            if (Pizza.Count > 0)
                            {
                                pizzaindx.AddRange(Pizza);
                                evenMorePizza.Pizzas.RemoveAll(p => Pizza.Contains(p.Id));
                            }

                            if (pizzaindx.Count == 4)
                            {
                                deliveries.Add(new Delivery(4, pizzaindx, LastPizzaIng));
                                outPutFile.Delivery = deliveries;
                                if (outPutFile.Delivery.Count() % (10 * 4) == 0)
                                {
                                    double teampercent = (double)100 / NofTeams;
                                    double percent     = (outPutFile.Delivery.Count() * teampercent);
                                    Console.WriteLine(percent + " => " + outPutFile.Delivery.Count() + " - Delivery / " + NofTeams);
                                }
                                i++;

                                Team4pplIndex++;
                            }
                        }
                        evenMorePizza.Team4ppl -= 1;
                    } while (evenMorePizza.Team4ppl > 0);
                    try
                    {
                        Console.WriteLine("Pizza Left: " + totalPizza + "\n- - - - - - -\n");
                        totalppl = (evenMorePizza.Team2ppl * 2) + (T3 = evenMorePizza.Team3ppl * 3) + (evenMorePizza.Team4ppl * 4);
                        Console.WriteLine("Pizza PPL: " + totalppl + "\n- - - - - - -\n");
                        Console.WriteLine("evenMorePizza.Team3ppl\n- - - - - - -\n");
                        Console.WriteLine(outPutFile.Delivery.Count());
                        totalPizza = evenMorePizza.Pizzas.Count;
                    }
                    catch { }
                    if (evenMorePizza.Team3ppl > 0 && (totalPizza > 0))
                    {
                        int Team3pplIndex = 0;
                        do
                        {
                            var pizzads = new List <string>();

                            totalPizza = evenMorePizza.Pizzas.Count;
                            if ((totalPizza >= (3 * evenMorePizza.Team3ppl)) && (totalPizza % 3 >= 0))
                            {
                                List <int>    pizzaindx    = new List <int>();
                                List <string> LastPizzaIng = new List <string>();
                                var           Pizza        = GiveMePizza(pizzads, evenMorePizza, archivePizza, 3);
                                if (Pizza.Count > 0)
                                {
                                    pizzaindx.AddRange(Pizza);
                                    var removePizza = evenMorePizza.Pizzas.RemoveAll(p => Pizza.Contains(p.Id));
                                }

                                if (pizzaindx.Count == 3)
                                {
                                    deliveries.Add(new Delivery(3, pizzaindx, LastPizzaIng));
                                    outPutFile.Delivery = deliveries;
                                    if (outPutFile.Delivery.Count() % (10 * 3) == 0)
                                    {
                                        double teampercent = (double)100 / NofTeams;
                                        double percent     = (outPutFile.Delivery.Count() * teampercent);
                                        Console.WriteLine(percent + " => " + outPutFile.Delivery.Count() + " - Delivery / " + NofTeams);
                                    }
                                    i++;
                                    Team3pplIndex++;
                                }
                            }
                            evenMorePizza.Team3ppl -= 1;
                        } while (evenMorePizza.Team3ppl > 0);
                    }
                    try
                    {
                        totalPizza = evenMorePizza.Pizzas.Count;
                        Console.WriteLine("Pizza Left: " + totalPizza + "\n- - - - - - -\n");
                        totalppl = (evenMorePizza.Team2ppl * 2) + (T3 = evenMorePizza.Team3ppl * 3) + (evenMorePizza.Team4ppl * 4);
                        Console.WriteLine("Pizza PPL: " + totalppl + "\n- - - - - - -\n");
                        Console.WriteLine("evenMorePizza.Team2ppl\n- - - - - - -\n");
                        Console.WriteLine(outPutFile.Delivery.Count());
                    }
                    catch { }
                    if (evenMorePizza.Team2ppl > 0 && (totalPizza > 0))
                    {
                        int Team2pplIndex = 0;
                        do
                        {
                            var pizzads = new List <string>();

                            totalPizza = evenMorePizza.Pizzas.Count;
                            if ((totalPizza >= (2 * evenMorePizza.Team2ppl)) && (totalPizza % 2 >= 0))
                            {
                                List <string> LastPizzaIng = new List <string>();
                                List <int>    pizzaindx    = new List <int>();
                                {
                                    var Pizza = GiveMePizza(pizzads, evenMorePizza, archivePizza, 2);
                                    if (Pizza.Count > 0)
                                    {
                                        pizzaindx.AddRange(Pizza);
                                        var removePizza = evenMorePizza.Pizzas.RemoveAll(p => Pizza.Contains(p.Id));
                                    }
                                }
                                if (pizzaindx.Count == 2)
                                {
                                    deliveries.Add(new Delivery(2, pizzaindx, LastPizzaIng));
                                    outPutFile.Delivery = deliveries;
                                    if (outPutFile.Delivery.Count() % (10 * 2) == 0)
                                    {
                                        double teampercent = (double)100 / NofTeams;
                                        double percent     = (outPutFile.Delivery.Count() * teampercent);
                                        Console.WriteLine(percent + " => " + outPutFile.Delivery.Count() + " - Delivery / " + NofTeams);
                                    }
                                    i++;
                                    Team2pplIndex++;
                                }
                            }
                            evenMorePizza.Team2ppl -= 1;
                        } while (evenMorePizza.Team2ppl > 0);
                    }
                }
                totalPizza = evenMorePizza.Pizzas.Count;
            }
            //while (totalPizza > 0);

            outPutFile.DeliveredPizza = deliveries.Count();
            return(outPutFile);
        }