// a CIDA structure represents a set of shell items, create the Nth item from that set in the form of an IShellItem
        //
        // this uses XP SP1 APIs so it works downlevel
        public static HRESULT CreateShellItemFromHIDA(ref CIDA pida, int iItem, out IShellItem ppsi)
        {
            ppsi = null;
            HRESULT hr = HRESULT.E_FAIL;

            if (iItem < pida.cidl)
            {
                // cast needed due to overload of the type of the 3rd param, when the first 2 params are null this is an absolute IDList
                hr = SHCreateShellItem(pida.GetFolderPIDL(), null, pida.GetItemRelativePIDL(iItem), out ppsi);
            }
            return(hr);
        }
        static void Main(string[] args)
        {
            CIDA c = new CIDA();

            Principal();
            void Principal()
            {
                Console.Clear();
                Console.WriteLine("1 - Consulta (Lista as contas registradas no banco de dados)");
                Console.WriteLine("2 - Insere (Faz cadastro de conta)");
                Console.WriteLine("3 - Deleta (Deleta a conta)");
                Console.WriteLine("4 - Altera (Altera a senha da conta)");
                Console.WriteLine("5 - Login (Faz o login para usar a calculadora)");
                Console.WriteLine("6 - Sair (Fecha o programa)");
                Console.Write("\nO que você deseja fazer? ");
                ConsoleKeyInfo x = Console.ReadKey();

                switch (x.KeyChar)
                {
                case '1':
                    Consulta();
                    break;

                case '2':
                    Insere();
                    break;

                case '3':
                    Deleta();
                    break;

                case '4':
                    Altera();
                    break;

                case '5':
                    Login();
                    break;

                case '6':
                    Sair();
                    break;

                default:
                    Principal();
                    break;
                }
            }

            void Consulta()
            {
                Console.Clear();
                c.CConsultar();
                Console.ReadKey(); Principal();
            }

            void Insere()
            {
                Console.Clear();
                Conta acc = new Conta();

                Console.Write("Digite seu primeiro nome: ");
                acc.PrimeiroNome = Console.ReadLine();
                Console.Write("Digite seu segundo nome: ");
                acc.SegundoNome = Console.ReadLine();
                Console.Write("Digite seu nome de usuario: ");
                acc.UserName = Console.ReadLine();
                Console.Write("Digite sua senha com no minimo 4 caracteres: ");
                acc.PassWord = Console.ReadLine();

                if (acc.PrimeiroNome != "" && acc.SegundoNome != "" && acc.UserName != "" && acc.PassWord != "" && acc.PassWord.Length >= 4)
                {
                    if (c.CheckUserName(acc))
                    {
                        Console.Write("\nUsuario ja existe, tente novamente. ");
                    }
                    else
                    {
                        c.CInserir(acc);
                    }
                }
                else
                {
                    Console.Write("\nOs campos não podem ficar vazios e a senha tem que ser maior que 4 caracteres! ");
                }

                Console.ReadKey(); Principal();
            }

            void Deleta()
            {
                Console.Clear();
                Conta acc = new Conta();

                Console.Write("Digite o nome da conta que quer deletar: ");
                acc.UserName = Console.ReadLine();
                if (c.CheckUserName(acc))
                {
                    c.CDeletar(acc);
                }
                else
                {
                    Console.Write("\nUsuario não existe, tente novamente. ");
                }

                Console.ReadKey(); Principal();
            }

            void Altera()
            {
                Console.Clear();
                Conta acc = new Conta();

                Console.Write("Digite o nome da conta que quer alterar a senha: ");
                acc.UserName = Console.ReadLine();
                if (c.CheckUserName(acc))
                {
                    Console.Write("Você realmente quer Alterar?\n1 - Sim, 2 - Não: ");
                    ConsoleKeyInfo x = Console.ReadKey();
                    switch (x.KeyChar)
                    {
                    case '1':
                        alterar();
                        break;
                    }
                    void alterar()
                    {
                        string senha, novasenha;

                        Console.Write("\n\nDigite a nova senha que você quer inserir com no minimo 4 caracteres: ");
                        senha = Console.ReadLine();
                        if (senha.Length >= 4)
                        {
                            Console.Write("Digite a senha novamente para verificação: ");
                            novasenha = Console.ReadLine();
                            if (senha == novasenha)
                            {
                                acc.PassWord = novasenha;
                                c.CAlterar(acc);
                                Console.Write("Senha alterada com sucesso! ");
                            }
                            else
                            {
                                Console.Write("As senhas não correspondem. ");
                            }
                        }
                        else
                        {
                            Console.Write("A senha tem que ser acima de 4 caracteres! ");
                        }
                    }
                }
                else
                {
                    Console.Write("A conta não existe, tente novamente! ");
                }
                Console.ReadKey(); Principal();
            }

            void Login()
            {
                Console.Clear();
                Conta acc = new Conta();

                Console.Write("Usuario: ");
                acc.UserName = Console.ReadLine();
                Console.Write("Senha: ");
                acc.PassWord = Console.ReadLine();

                if (c.CheckUserName(acc))
                {
                    if (c.CheckPassWord(acc))
                    {
                        if (c.CheckAccount())
                        {
                            c.Nomes();
                            new Calculadora();
                        }
                    }
                    else
                    {
                        Console.WriteLine("\nSenha incorreta. ");
                    }
                }
                else
                {
                    Console.Write("O nome de usuario não existe, tente novamente. ");
                }
                Console.ReadKey(); Principal();
            }

            void Sair()
            {
                Console.WriteLine("\n");
            }
        }