public void PartindoAutomatico(CarroPercurso carroPercurso, Listas listas, PercursoCore percursoCore)   // TODO ESTUDAR FUNÇÕES LOCAIS E IMPLEMENTAR. DIMINUIR METODO.
        {
            double    percorreu        = 0.0;
            double    cont             = 0.;
            int       QtdAbastecimento = 0;
            int       QtdCalibragem    = 0;
            double    combustivelgasto = 0.0;
            Relatorio relatorio        = new Relatorio(); // instanciar um relatório para usalo para adicionar alterações durante o percurso

            relatorio.CarroPercurso = carroPercurso;

            void CarregarRelatorio()
            {
                percursoCore.RegistraQuantidadeDeAbastecimento(QtdAbastecimento, relatorio);
                percursoCore.RegistrarDistanciaPercorrida(percorreu, relatorio);
                percursoCore.RegistroQuantidadeDeCalibracoes(QtdCalibragem, relatorio);
                percursoCore.RegistroDeCombustivelUtilizado(combustivelgasto, relatorio);
                percursoCore.RegistrandoAlteracoesClimaticas(percorreu, carroPercurso.Percurso.Clima, listas);
            }

            while (carroPercurso.Percurso.DistanciaAlterada > 0.0)
            {
                percursoCore.CalculandoClimaEPneu(carroPercurso.Percurso, carroPercurso.Veiculo);

                if (carroPercurso.Veiculo.TipoCarro == "FLEX" && carroPercurso.Veiculo.CombustivelAlcool == 0.0 && carroPercurso.Veiculo.CombustivelGasolina == 0.0)   // tabela verdade


                {
                    Console.WriteLine("O VEICULO ESTA SEM COMBUSTIVEL DESEJA ABASTECER(S/N)");
                    string queroabastecer = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                    if (queroabastecer == "S")
                    {
                        AbastecerOuCompletarAlcool(carroPercurso.Veiculo);
                        AbastecerOuCompletaGasolina(carroPercurso.Veiculo);
                        QtdAbastecimento++;
                    }
                    else if (queroabastecer == "N")
                    {
                        Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                        CarregarRelatorio();
                        return;
                    }
                    if (carroPercurso.Veiculo.StatusPneu == 0)
                    {
                        Console.WriteLine("VOCÊ PRECISA CALIBRAR O PNEU PARA PROSSEGUIR VIAGEM\n DESEJA CALIBRAR (S/N) ");
                        string decidindo = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                        if (decidindo == "S")
                        {
                            CalibrarPneu(carroPercurso.Veiculo);
                            QtdCalibragem++;
                        }
                        else
                        {
                            Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                            CarregarRelatorio();
                            return;
                        }
                    }
                }
                else if (carroPercurso.Veiculo.TipoCarro == "GASOLINA" && carroPercurso.Veiculo.CombustivelGasolina == 0.0)   // tabela verdade
                {
                    Console.WriteLine("O VEICULO ESTA SEM COMBUSTIVEL DESEJA ABASTECER(S/N)");
                    string queroabastecer = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                    if (queroabastecer == "S")
                    {
                        AbastecerOuCompletaGasolina(carroPercurso.Veiculo);
                        QtdAbastecimento++;
                    }
                    else if (queroabastecer == "N")
                    {
                        Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                        CarregarRelatorio();
                        break;
                    }
                }
                if (carroPercurso.Veiculo.StatusPneu == 0)
                {
                    Console.WriteLine("VOCÊ PRECISA CALIBRAR O PNEU PARA PROSSEGUIR VIAGEM\n DESEJA CALIBRAR (S/N) ");
                    string decidindo = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                    if (decidindo == "S")
                    {
                        CalibrarPneu(carroPercurso.Veiculo);
                        QtdCalibragem++;
                    }
                    else
                    {
                        Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                        CarregarRelatorio();
                        break;
                    }
                }

                if (carroPercurso.Veiculo.TipoCarro == "ALCOOL" && carroPercurso.Veiculo.CombustivelAlcool == 0.0)   // tabela verdade
                {
                    Console.WriteLine("O VEICULO ESTA SEM COMBUSTIVEL DESEJA ABASTECER(S/N)");
                    string queroabastecer = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                    if (queroabastecer == "S")
                    {
                        AbastecerOuCompletarAlcool(carroPercurso.Veiculo);
                        QtdAbastecimento++;
                    }
                    else if (queroabastecer == "N")
                    {
                        Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                        CarregarRelatorio();
                        return;
                    }
                }
                if (carroPercurso.Veiculo.StatusPneu == 0)
                {
                    Console.WriteLine("VOCÊ PRECISA CALIBRAR O PNEU PARA PROSSEGUIR VIAGEM\n DESEJA CALIBRAR (S/N) ");
                    string decidindo = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                    if (decidindo == "S")
                    {
                        CalibrarPneu(carroPercurso.Veiculo);
                        QtdAbastecimento++;
                    }
                    else
                    {
                        Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                        CarregarRelatorio();
                        return;
                    }
                }
                carroPercurso.Percurso.DistanciaAlterada -= 0.1;

                if (carroPercurso.Veiculo.TipoCarro == "FLEX" || carroPercurso.Veiculo.TipoCarro == "ALCOOL")
                {
                    carroPercurso.Veiculo.CombustivelAlcool -= 0.1 / carroPercurso.Veiculo.AutonomiaAlcoolVariando;
                    combustivelgasto += 0.1 / carroPercurso.Veiculo.AutonomiaAlcoolVariando;
                }
                if (carroPercurso.Veiculo.TipoCarro == "FLEX" || carroPercurso.Veiculo.TipoCarro == "GASOLINA")
                {
                    carroPercurso.Veiculo.CombustivelGasolina -= 0.1 / carroPercurso.Veiculo.AutonomiaGasolinaVariando;
                    combustivelgasto += 0.1 / carroPercurso.Veiculo.AutonomiaGasolinaVariando;
                }
                percorreu += 0.1;
                cont      += 0.1;
                // todo aumentar cont ==100 valor para 100 depois
                if (cont >= 1.0)
                {
                    Console.WriteLine("VOCÊ PERCORREU 100 KM");
                    percursoCore.VariacaoDoClima(carroPercurso.Percurso);
                    percursoCore.RegistrandoAlteracoesClimaticas(percorreu, carroPercurso.Percurso.Clima, listas);
                    percursoCore.Descalibrar(carroPercurso.Veiculo);
                    cont = 0.0;
                    Console.ReadKey();
                    CarregarRelatorio(); // TODO CARRO PERCURSO FICA NULO
                    listas.Relatorios.Add(relatorio);
                    Console.WriteLine("VIAGEM CONCLUIDA COM SUCESSO!\nOBRIGADO!");
                    Console.ReadLine();
                    return;
                }
            }
        }
        public void PartindoManual(PercursoCore percursocore, Listas listas, CarroPercurso carroPercurso)
        {
            double    percorreu        = 0.0;
            int       QtdAbastecimento = 0;
            int       QtdCalibragem    = 0;
            double    combustivelgasto = 0.0;
            Relatorio relatorio        = new Relatorio();

            void CarregarRelatorio()
            {
                percursocore.RegistraQuantidadeDeAbastecimento(QtdAbastecimento, relatorio);
                percursocore.RegistrarDistanciaPercorrida(percorreu, relatorio);
                percursocore.RegistroQuantidadeDeCalibracoes(QtdCalibragem, relatorio);
                percursocore.RegistroDeCombustivelUtilizado(combustivelgasto, relatorio);
                percursocore.RegistrandoAlteracoesClimaticas(percorreu, carroPercurso.Percurso.Clima, listas);
            }

            while (carroPercurso.Percurso.DistanciaAlterada > 0.0)
            {
                Console.WriteLine("QUANTOS QUILÔMETROS VOCÊ DESEJA PERCORRER?");
                double dirigindomanual = Validacoes.ValidarDouble(Console.ReadLine());

                for (int i = 1; i <= dirigindomanual; i++)
                {
                    percursocore.CalculandoClimaEPneu(carroPercurso.Percurso, carroPercurso.Veiculo);

                    if (carroPercurso.Veiculo.TipoCarro == "FLEX" && carroPercurso.Veiculo.CombustivelAlcool == 0.0 && carroPercurso.Veiculo.CombustivelGasolina == 0.0)
                    {
                        Console.WriteLine("O VEICULO ESTA SEM COMBUSTIVEL DESEJA ABASTECER(S/N)");
                        string queroabastecer = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                        if (queroabastecer == "S")
                        {
                            AbastecerOuCompletarAlcool(carroPercurso.Veiculo);
                            AbastecerOuCompletaGasolina(carroPercurso.Veiculo);
                            QtdAbastecimento++;
                        }
                        else if (queroabastecer == "N")
                        {
                            Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                            CarregarRelatorio();
                            break;
                        }
                        if (carroPercurso.Veiculo.StatusPneu == 0)
                        {
                            Console.WriteLine("VOCÊ PRECISA CALIBRAR O PNEU PARA PROSSEGUIR VIAGEM\n DESEJA CALIBRAR (S/N) ");
                            string decidindo = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                            if (decidindo == "S")
                            {
                                CalibrarPneu(carroPercurso.Veiculo);
                                QtdCalibragem++;
                            }
                            else
                            {
                                Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                                CarregarRelatorio();
                                break;
                            }
                        }
                    }
                    else if (carroPercurso.Veiculo.TipoCarro == "GASOLINA" && carroPercurso.Veiculo.CombustivelGasolina == 0.0)   // tabela verdade
                    {
                        Console.WriteLine("O VEICULO ESTA SEM COMBUSTIVEL DESEJA ABASTECER(S/N)");
                        string decidindo = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                        if (decidindo == "S")
                        {
                            AbastecerOuCompletaGasolina(carroPercurso.Veiculo);
                            QtdAbastecimento++;
                        }
                        else if (decidindo == "N")
                        {
                            Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                            CarregarRelatorio();
                            break;
                        }
                    }
                    if (carroPercurso.Veiculo.StatusPneu == 0)
                    {
                        Console.WriteLine("VOCÊ PRECISA CALIBRAR O PNEU PARA PROSSEGUIR VIAGEM\n DESEJA CALIBRAR (S/N) ");
                        string quero = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                        if (quero == "S")
                        {
                            CalibrarPneu(carroPercurso.Veiculo);
                            QtdCalibragem++;
                        }
                        else
                        {
                            Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                            CarregarRelatorio();
                            break;
                        }
                    }

                    if (carroPercurso.Veiculo.TipoCarro == "ALCOOL" && carroPercurso.Veiculo.CombustivelAlcool == 0.0)   // tabela verdade
                    {
                        Console.WriteLine("O VEICULO ESTA SEM COMBUSTIVEL DESEJA ABASTECER(S/N)");
                        string decidindo = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                        if (decidindo == "S")
                        {
                            AbastecerOuCompletarAlcool(carroPercurso.Veiculo);
                            QtdAbastecimento++;
                        }
                        else if (decidindo == "N")
                        {
                            Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                            CarregarRelatorio();
                            break;
                        }
                    }
                    if (carroPercurso.Veiculo.StatusPneu == 0)
                    {
                        Console.WriteLine("VOCÊ PRECISA CALIBRAR O PNEU PARA PROSSEGUIR VIAGEM\n DESEJA CALIBRAR (S/N) ");
                        string x = Validacoes.SimOuNao(Console.ReadLine().ToUpper());
                        if (x == "S")
                        {
                            CalibrarPneu(carroPercurso.Veiculo);
                            QtdAbastecimento++;
                        }
                        else
                        {
                            Console.WriteLine("VEICULO INCAPAZ DE PROSSEGUIR VIAGEM");
                            CarregarRelatorio();
                            break;
                        }
                    }
                    if (carroPercurso.Percurso.DistanciaAlterada <= 0.0)
                    {
                        break;
                    }

                    carroPercurso.Percurso.DistanciaAlterada -= 1.0;
                    percorreu++;

                    if (carroPercurso.Veiculo.TipoCarro == "FLEX" || carroPercurso.Veiculo.TipoCarro == "ALCOOL")
                    {
                        carroPercurso.Veiculo.CombustivelAlcool -= 1.0 / carroPercurso.Veiculo.AutonomiaAlcoolVariando;
                        combustivelgasto += 1.0 / carroPercurso.Veiculo.AutonomiaAlcoolVariando;
                    }
                    if (carroPercurso.Veiculo.TipoCarro == "FLEX" || carroPercurso.Veiculo.TipoCarro == "GASOLINA")
                    {
                        carroPercurso.Veiculo.CombustivelGasolina -= 1.0 / carroPercurso.Veiculo.AutonomiaGasolinaVariando;
                        combustivelgasto += 1.0 / carroPercurso.Veiculo.AutonomiaGasolinaVariando;
                    }
                    if (percorreu % 100.0 == 0 && percorreu > 0)   // todo saber pq esta contando o zero
                    {
                        Console.WriteLine("VOCÊ PERCORREU 100 KM");
                        percursocore.CalculandoClimaEPneu(carroPercurso.Percurso, carroPercurso.Veiculo);
                        percursocore.RegistrandoAlteracoesClimaticas(percorreu, carroPercurso.Percurso.Clima, listas);
                        percursocore.Descalibrar(carroPercurso.Veiculo);
                    }
                }

                if (carroPercurso.Percurso.DistanciaAlterada <= 0.0)
                {
                    break;
                }
                Console.Write($" ATÉ AGORA VOCÊ PERCORREU {percorreu.ToString("F2", CultureInfo.InvariantCulture)} KM !\nDESEJA CONTINUAR A VIAGEM? (S/N): ");
                string opcao = Validacoes.SimOuNao(Console.ReadLine());
                if (opcao != "S")
                {
                    return;
                }
            }
            CarregarRelatorio();
            listas.Relatorios.Add(relatorio);
            Console.WriteLine("VIAGEM CONCLUIDA COM SUCESSO!\nOBRIGADO!");
        }