/*************************************************************************************************
         *                                      TIPOPESSOA
         * **********************************************************************************************/

        #region Método de Manitupalção de TipoPessoa
        public static void ManipulaTipoPessoa()
        {
            Console.WriteLine("\nBusca dos Dados na Base de Dados TXT ");
            #region Busca de Dados de TipoPessoa na base de Dados
            listaTipoPessoa = TipoPessoa.Carrega(BaseDadosTipoPessoa);
            #endregion Fim de Buscas de dados nos TipoPessoa

            #region Mostra os Dados dos Lançamentos

            foreach (TipoPessoa TipPes in listaTipoPessoa)
            {
                Console.WriteLine("\n\n TipoPessoa " + TipPes.ID);
                Console.WriteLine("\n Nome : {0} " + "\nDataCriacao : {1} ",
                                  TipPes.Nome, TipPes.DataCriacao);
            }

            #endregion
            Console.WriteLine("---------------------------------------------------------");


            #region Criando os Objetos
            TipoPessoa TipoPes = new TipoPessoa();
            Console.WriteLine("Digite o nome da Pessoa: ");
            TipoPes.Nome = Console.ReadLine();
            TipoPessoa.Inserir(listaTipoPessoa, TipoPes);
            #endregion

            #region Mostra os objetos da Lista
            foreach (TipoPessoa TipPes in listaTipoPessoa)
            {
                Console.WriteLine("\n\n TipoPessoa " + TipPes.ID);
                Console.WriteLine("\n Nome : {0} " + "\nDataCriacao : {1}",
                                  TipPes.Nome, TipPes.DataCriacao);
            }
            #endregion
            #region Método para salva no arquivo
            TipoPessoa.Salvar(listaTipoPessoa, BaseDadosTipoPessoa);
            Console.WriteLine("Tipo de Pessoa Cadastrada Com Sucesso");
            #endregion
            Console.ReadKey();
        }
        /*************************************************************************************************
         *                                          PESSOA
         * **********************************************************************************************/
        #region Metodo de Manipulação de Pessoa


        public static void ManipulaPessoa()
        {
            //adciono a lista os valores do arquivo [BaseDadosTipoPessoa] que contem cadastrado todos os  Tipo de Pessoas Disponiveis
            listaTipoPessoa   = TipoPessoa.Carrega(BaseDadosTipoPessoa);
            listaTipoEndereco = TipoEndereco.Carrega(BaseDadosTipoEndereco);
            //adciono a lista os valores do arquivo [BaseDadosEndereco] que contem cadastrado todos os  Endereços Disponiveis
            listaEndereco = Endereco.Carrega(BaseDadosEndereco, BaseEndereco_Tipo, listaTipoEndereco);

            //-------------------------------
            Console.WriteLine("\nBusca dos Dados na Base de Dados TXT ");
            #region Busca de Dados de Pessoa na base de Dados

            listaPessoa = Pessoa.Carrega(BaseDadosPessoa, BasePessoa_TipoPessoa, BasePessoa_Endereco, listaEndereco, listaTipoPessoa);
            #endregion Fim de Buscas de dados nas Empresas

            #region Mostra os Dados dos Endereços
            //Escreve na tela os valores da lista "listaEndereço";
            foreach (Pessoa Pess in listaPessoa)
            {
                //mostra os valores do arquivo BaseDadosEndereco
                Console.WriteLine("\n\n Pessoa " + Pess.ID);
                Console.WriteLine("\n Nome : {0} " + "\nTelefone : {1} " + "\nData de Criacao : {2} ",
                                  Pess.Nome, Pess.Telefone, Pess.DataCriacao);
                //Mostra os dados do arquivo BasePessoa_Endereco [Este arquivo armazena os realcionamentos entre Pessoa e Endereço (muitos para muitos)]
                foreach (Endereco x in Pess.Endereco)
                {
                    Console.WriteLine(x.ID + " , " + x.Logradouro + " , " + x.Numero + " , " + " , " + x.Bairro + " , " + x.Cidade + " , " + x.DataCriacao);
                }
                //Mostra os dados do arquivo BasePessoa_TipoPessoa [Este arquivo armazena os realcionamentos entre Pessoa e Tipos de Pessoa (muitos para muitos)]
                foreach (TipoPessoa x in Pess.TipoPessoa)
                {
                    Console.WriteLine(x.ID + " , " + x.Nome);
                }
            }

            #endregion
            Console.WriteLine("---------------------------------------------------------");
            //interage com o usuario para inserir um novo endereço

            #region Criando os Objetos
            Pessoa Pesso = new Pessoa();
            Console.WriteLine("Digite o Nome: ");
            Pesso.Nome = Console.ReadLine();
            Console.WriteLine("Digite o Telefone: ");
            Pesso.Telefone = Console.ReadLine();


            Console.WriteLine("Adicionar um  Endereço para o a Pessoa");

            /*
             * Adicionando o Endereço a Pessoa
             */
            //crio uma variavel string vazia
            string opcao = "";
            //crio uma lista [lista] do tipo [Endereco]
            List <Endereco> lista = new List <Endereco>();
            foreach (Endereco End in listaEndereco)
            {
                //mostra item por item para o usuario escolher
                Console.WriteLine("\n\n Endereco " + End.ID);
                Console.WriteLine("\n Logradouro : {0} " + "\nN : {1} " + "\nBairro : {2} " + "\nCidade : {3} " + "\nDataCriacao : {4} ",
                                  End.Logradouro, End.Numero, End.Bairro, End.Cidade, End.DataCriacao);
                //interege com o usuario. se opção for igual a [S] adiciona valor ao endereço, senão continua...
                Console.WriteLine("Digite [S] para adicionar este Endereco [N] para nao : ");
                opcao = Console.ReadLine();
                if (opcao == "s")
                {
                    //Adiciona os items na lista [lista]
                    lista.Add(End);
                    //seto o [Ende.TipoEndereco] com toos os itens da lista [lista]
                    Pesso.Endereco = lista;
                }
                else
                {
                    opcao = "";
                }

                /*
                 * Adicionando o Tipo de Pessoa a Pessoa
                 */
                //Limpo a Variavel opcao
                opcao = "";
                //crio uma lista [lista] do tipo [Endereco]
                List <TipoPessoa> listTpess = new List <TipoPessoa>();
                foreach (TipoPessoa Tipess in listaTipoPessoa)
                {
                    //mostra os valores do arquivo BaseDadosEndereco
                    Console.WriteLine("\n\n Pessoa " + Tipess.ID);
                    Console.WriteLine("\n Nome : {0} ",
                                      Tipess.Nome);

                    Console.WriteLine("Digite [S] para adicionar este TipoPessoa [N] para nao : ");
                    opcao = Console.ReadLine();
                    if (opcao == "s")
                    {
                        //Adiciona os items na lista [lista]
                        listTpess.Add(Tipess);
                        //seto o [Ende.TipoEndereco] com toos os itens da lista [lista]
                        Pesso.TipoPessoa = listTpess;
                    }
                    else
                    {
                        opcao = "";
                    }
                }
            }
            //Ensiro os Valores

            Pessoa.Inserir(listaPessoa, Pesso);
            #endregion

            #region Mostra os objetos da Lista
            foreach (Pessoa Pes in listaPessoa)
            {
                //mostra os itens da Pessoa
                Console.WriteLine("\n\n Pessoa " + Pes.ID);
                Console.WriteLine("\n Nome : {0} " + "\nTelefone : {1} " + "\nDataCriacao : {2} ",
                                  Pes.Nome, Pes.Telefone, Pes.DataCriacao);
                //mostra os itens do Endereco
                foreach (Endereco End in Pes.Endereco)
                {
                    Console.WriteLine(End.ID + ";" + End.Logradouro + ";" + End.Numero + ";" + End.Bairro + ";" + End.Cidade + ";" + Convert.ToString(End.DataCriacao) + ";" + Pes.ID);
                }
                //Mostra os itens de TipoPessoa
                foreach (TipoPessoa TipPes in Pes.TipoPessoa)
                {
                    Console.WriteLine(TipPes.ID + ";" + TipPes.Nome + ";" + Pes.ID);
                }
            }
            #endregion
            #region Método para salva no arquivo
            //Salva os Dados nos Arquivos [BaseDadosPessoa] , [BasePessoa_TipoPessoa] e [BasePessoa_Endereco]
            Pessoa.Salvar(listaPessoa, BaseDadosPessoa, BasePessoa_Endereco, BasePessoa_TipoPessoa);
            Console.WriteLine("Pessoa Cadastrada Com Sucesso");
            #endregion
            Console.ReadKey();
        }