public static Finance ReadFinalInvoice()
        {
            string fileName = "TodasAsFaturas.txt";

            if (File.Exists(fileName))
            {
                FileStream      fileStream = File.OpenRead(fileName);
                BinaryFormatter f          = new BinaryFormatter();

                Finance l = f.Deserialize(fileStream) as Finance;
                fileStream.Close();
                return(l);
            }
            else
            {
                return(new Finance());
            }
        }
        static void Main(string[] args)
        {
            int selection = 0;

            //Variáveis de leitura do teclado:
            string nPosition, nUser, nPassword, nName, nCategory;
            int    nProductQnt, nPrice;
            string saleProductName;
            int    saleProductQnt;

            //Instanciar as listas:
            MarketTeam uList   = new MarketTeam();
            Stock      pList   = new Stock();
            Finance    finance = Finance.ReadFinalInvoice();

            Invoice.id = finance.allSalesList.Count;

            uList.ReadUsersFile();
            pList.ReadFromFileStock();

            //MENU PRINCIPAL
            while (selection != 3)
            {
                Console.WriteLine("     **RodriguesBrothersMarket**");
                Console.WriteLine("1 - Login");
                Console.WriteLine("2 - Criar Funcionário");
                Console.WriteLine("3 - Sair");

                selection = int.Parse(Console.ReadLine());
                Console.Clear();

                switch (selection)
                {
                case 1:
                    Console.WriteLine("     **Efetue o seu login**");

                    Console.WriteLine("Insira a função do utilizador(GERENTE|REPOSITOR|CAIXA): ");
                    nPosition = Console.ReadLine();
                    Console.WriteLine("Insira o nome de utilizador: ");
                    nUser = Console.ReadLine();
                    Console.WriteLine("Insira a password: "******"gerente")
                        {
                            Console.WriteLine("OPERAÇÂO LOGIN: Efetuada com sucesso!");
                            MenuManager();
                        }
                        if (userMatch.position == "repositor")
                        {
                            Console.WriteLine("OPERAÇÂO LOGIN: Efetuada com sucesso!");
                            MenuReplanisher();
                        }
                        if (userMatch.position == "caixa")
                        {
                            Console.WriteLine("OPERAÇÂO LOGIN: Efetuada com sucesso!");
                            MenuCashier();
                        }
                    }
                    break;

                case 2:
                    Console.WriteLine("     **Criar Funcionário**");

                    Console.WriteLine("Insira a função do novo utilizador (GERENTE|REPOSITOR|CAIXA):");
                    nPosition = Console.ReadLine();

                    Console.WriteLine("Insira o nome do novo utilizador:");
                    nUser = Console.ReadLine();

                    Console.WriteLine("Insira a password:"******"Vai Sair");
                    break;

                default:
                    Console.WriteLine("Opção Inválida. Tente novamente");
                    break;
                }

                Console.ReadKey();
                Console.Clear();
            }
            Console.WriteLine("Obrigado Pela Preferência | R&R Market!!!");

            //SUB-MENU GERENTE:
            void MenuManager()
            {
                int managerSelection = 0;

                while (managerSelection != 4)
                {
                    Console.WriteLine("     **MENU DO GERENTE**");

                    Console.WriteLine("1 - Apagar Funcionários");
                    Console.WriteLine("2 - Vender Produtos");
                    Console.WriteLine("3 - Listar todas as faturas");
                    Console.WriteLine("4 - Voltar");

                    managerSelection = int.Parse(Console.ReadLine());
                    Console.Clear();

                    switch (managerSelection)
                    {
                    case 1:
                        Console.WriteLine("Introduza o nome do funcionário que pretende eliminar");
                        string managerInput = Console.ReadLine();
                        bool   result       = uList.RemoveFromUsersList(managerInput);
                        if (result)
                        {
                            Console.WriteLine("Utilizador eliminado com sucesso!");
                        }
                        else
                        {
                            Console.WriteLine("Operação sem sucesso!");
                        }
                        uList.SaveToFileUsers();
                        break;

                    case 2:
                        MenuForSales();
                        break;

                    case 3:
                        Console.WriteLine("LISTAGEM DE TODAS AS FATURAS:");
                        Console.WriteLine(finance.ToString());
                        break;

                    case 4: return;

                    default:
                        Console.WriteLine("Opção Inválida. Tente novamente");
                        break;
                    }

                    uList.SaveToFileUsers();
                }
            }

            //SUB-MENU REPOSITOR:
            void MenuReplanisher()
            {
                int replanisherSelection = 0;

                while (replanisherSelection != 4)
                {
                    Console.WriteLine("     **MENU DO REPOSITOR**");

                    Console.WriteLine("1 - Adicionar um novo produto ao stock");
                    Console.WriteLine("2 - Remover produtos ao stock");
                    Console.WriteLine("3 - Limpar stock");
                    Console.WriteLine("4 - Voltar");

                    replanisherSelection = int.Parse(Console.ReadLine());
                    Console.Clear();

                    switch (replanisherSelection)
                    {
                    case 1:
                        Console.WriteLine("Intoduza o nome da categoria do produto (CONGELADOS|PRATELEIRA|ENLATADOS): ");
                        nCategory = Console.ReadLine();
                        Console.WriteLine("Intoduza o nome do produto: ");
                        nName = Console.ReadLine();
                        Console.WriteLine("Introduza a quantidade deste produto: ");
                        nProductQnt = int.Parse(Console.ReadLine());
                        Console.WriteLine("Introduza o preço do produto: ");
                        nPrice = int.Parse(Console.ReadLine());
                        pList.CreateProduct(Product.ConvertCategory(nCategory), nName, nProductQnt, nPrice);
                        pList.SaveToFileStock();
                        break;

                    case 2:
                        Console.WriteLine("Qual é o produto que pretende elimiar do stock: ");
                        string replanisherInput = Console.ReadLine();
                        bool   result           = pList.DeleteProductFromList(replanisherInput);
                        if (result)
                        {
                            Console.WriteLine("O Produto foi eliminado do stock com sucesso!");
                        }
                        else
                        {
                            Console.WriteLine("Operação sem sucesso!");
                        }
                        pList.SaveToFileStock();
                        break;

                    case 3:
                        if (pList.ClearStock())
                        {
                            Console.WriteLine("O stock foi eliminado com sucesso!");
                        }
                        break;

                    case 4: return;

                    default:
                        Console.WriteLine("Opção Inválida. Tente novamente");
                        break;
                    }
                    pList.SaveToFileStock();
                }
            }

            //SUB-MENU CAIXA:
            void MenuCashier()
            {
                int cashierSelection = 0;

                while (cashierSelection != 4)
                {
                    Console.WriteLine("     **MENU DO CAIXA**");

                    Console.WriteLine("1 - Vender Produtos");
                    Console.WriteLine("2 - Voltar");

                    cashierSelection = int.Parse(Console.ReadLine());
                    Console.Clear();

                    switch (cashierSelection)
                    {
                    case 1:
                        MenuForSales();
                        break;

                    case 2: return;

                    default:
                        Console.WriteLine("Opção Inválida. Tente novamente");
                        break;
                    }
                }
            }

            //SUB-MENU PARA VENDA DE PRODUTOS:
            void MenuForSales()
            {
                Invoice invoice   = new Invoice();
                int     selection = 0;

                while (selection != 2)
                {
                    Console.WriteLine("     **VENDA DE PRODUTOS**");

                    Console.WriteLine(pList.ToString());
                    Console.WriteLine("0 - Finalizar compra");
                    Console.WriteLine("1 - Adicionar Produtos ao carrinho");
                    Console.WriteLine("2 - Voltar");

                    selection = int.Parse(Console.ReadLine());

                    switch (selection)
                    {
                    case 0:
                        Console.Clear();
                        Console.WriteLine("Introduza o nome do cliente para finalizar a compra e emitir a sua fatura: ");
                        invoice.userName     = nUser;
                        invoice.customerName = Console.ReadLine();

                        Console.WriteLine(invoice.ToString());

                        invoice.SaveInvoice();
                        finance.AddInvoice(invoice);
                        finance.SaveFinalInvoice();
                        pList.SaveToFileStock();

                        break;

                    case 1:
                        Console.WriteLine("Escreva o nome do produto que quer adicionar ao carrinho: ");
                        saleProductName = Console.ReadLine();
                        Console.WriteLine("Indique a quantidade do produto selecionado que pretende adicionar ao carrinho: ");
                        saleProductQnt = int.Parse(Console.ReadLine());

                        Product productMatch = pList.SelectProduct(saleProductName, saleProductQnt);
                        if (productMatch != null)
                        {
                            if (productMatch.productName == saleProductName && productMatch.productQnt >= saleProductQnt)
                            {
                                productMatch.productQnt -= saleProductQnt;

                                int priceT = (saleProductQnt * productMatch.price);

                                invoice.CreateInvoiceLine(productMatch.productName, saleProductQnt, priceT);
                            }
                            else
                            {
                                Console.WriteLine("Lamentamos, mas só dipomos de " + productMatch.productQnt + "unidades.");
                            }
                        }

                        break;

                    default:
                        Console.WriteLine("Opção Inválida. Tente novamente");
                        break;
                    }
                }
            }
        }