private const double TRIBUTACAO_ICMS = 0.16; //Exemplo MG em certos produtos

        public double Calcular(ItemNoEstoque item)
        {
            var impostoRetido = item.Valor * TRIBUTACAO_ICMS;

            item.SetNovoPreco(item.Valor + impostoRetido); //Troca o preco atual

            return(impostoRetido);
        }
        private const double TRIBUTACAO_ALFANDEGA = 0.6; //Caso o produto custe mais de 100 reais

        public double Calcular(ItemNoEstoque item)
        {
            if (item.Valor > 100)
            {
                var impostoRetido = item.Valor * TRIBUTACAO_ALFANDEGA;

                item.SetNovoPreco(item.Valor + impostoRetido);

                return(impostoRetido);
            }

            return(-1);
        }
        static void Main(string[] args)
        {
            //Cadeia de responsabilidade permite q outras classes conheçam suas antecedentes
            //Ele liga cada classe com uma proxima, permitindo que tenha um maior desacoplamento no códido
            //Nota: que esse codigo pode ser reescrito utilizando o template method

            ItemNoEstoque itemN1 = new ItemNoEstoque("Bic", 3.90, 10);
            ItemNoEstoque itemN2 = new ItemNoEstoque("Castel", 3.90, 10);
            ItemNoEstoque itemN3 = new ItemNoEstoque("Bic Vermelha", 3.90, 10);
            ItemNoEstoque itemN4 = new ItemNoEstoque("Lapiseira", 3.90, 2_000);
            ItemNoEstoque itemN5 = new ItemNoEstoque("XBOX", 3_900, 10);
            ItemNoEstoque itemN6 = new ItemNoEstoque("PS4", 4_800, 10);

            EstoqueGeral estoque = new EstoqueGeral("Papelaria");

            Vendedor vendedorAndre = new Vendedor("Andre Soares Gomes", 10_000.00);

            IMeta meta5K  = new _5KDeVendas();
            IMeta meta10K = new _10KDeVendas();
            IMeta meta20K = new _20KDeVendas();

            meta5K.ProximaMeta  = meta10K;
            meta10K.ProximaMeta = meta20K;

            estoque.SetVendedorResponsavel(vendedorAndre);
            estoque.SetMetaInicial(meta5K);

            estoque.AdicionaNovoItemNoEstoque(itemN1);
            estoque.AdicionaNovoItemNoEstoque(itemN2);
            estoque.AdicionaNovoItemNoEstoque(itemN3);
            estoque.AdicionaNovoItemNoEstoque(itemN4);
            estoque.AdicionaNovoItemNoEstoque(itemN5);
            estoque.AdicionaNovoItemNoEstoque(itemN6);

            estoque.LeituraMensalDeMeta();

            //estoque.LeituraDosProdutos();
            //estoque.LeituraDoValorTotalEmEstoque();


            ReadKey();
        }
        static void Main(string[] args)
        {
            //O padrão estrategy é um design patthern que permite que multiplas estrátegias possam ser utilizadas no mesmo objetivo
            //Ele permite um menor desacoplamento entre as classes, permitindo por consequinte uma maior escalabilidade do código

            ItemNoEstoque itemN1 = new ItemNoEstoque(100_000.00, "Lancer");
            ItemNoEstoque itemN2 = new ItemNoEstoque(680.00, "Zenfone 7");
            ItemNoEstoque itemN3 = new ItemNoEstoque(90.00, "Xiaomi Airdots");

            WriteLine(itemN1.Informacoes);
            WriteLine(itemN2.Informacoes);
            WriteLine(itemN3.Informacoes);

            IImposto icms      = new Icms();
            IImposto alfandega = new TaxaAlfandega();

            CalculadoraDeImposto.MostraInformações(itemN1, icms);
            CalculadoraDeImposto.MostraInformações(itemN2, alfandega);
            CalculadoraDeImposto.MostraInformações(itemN3, alfandega);

            ReadKey();
        }