예제 #1
0
        /// <summary>
        /// Método responsável por iniciar o preparo de um produto
        /// </summary>
        /// <param name="produto">Produto a ser preparado</param>
        /// <param name="callbackSucesso">Callback retornado em caso de sucesso</param>
        /// <param name="callbackErro">Callback retornado em caso de erro</param>
        /// <returns></returns>
        public async Task IniciarPreparoAsync(IProduto produto, Action callbackSucesso = null, Action callbackErro = null)
        {
            await Task.Run(() =>
            {
                if (produto == null)
                {
                    DispararEventoEnviandoMensagem("Selecione o café desejado.");

                    if (callbackErro != null)
                    {
                        callbackErro.Invoke();
                    }

                    return;
                }

                try
                {
                    produto.Comprar(this.Saldo);
                    Saldo -= produto.Preco;
                }
                catch (Exception ex)
                {
                    DispararEventoEnviandoMensagem(ex.Message);

                    if (callbackErro != null)
                    {
                        callbackErro.Invoke();
                    }

                    return;
                }

                this.EmPreparo = true;
                this.DispararEventoIniciandoPreparo();

                DispararEventoEnviandoMensagem($"Iniciando o preparo do {produto.Nome}, por favor aguarde alguns instantes.");

                this.EsquentarAgua();

                foreach (var item in produto.Ingredientes)
                {
                    AnimarMensagem($"Adicionando {item.Nome}, por favor aguarde alguns instantes");
                }

                DispararEventoEnviandoMensagem($"{produto.Nome} pronto, pode retirar.");

                this.EmPreparo             = false;
                this.CafeProntoParaRetirar = true;

                if (callbackSucesso != null)
                {
                    callbackSucesso.Invoke();
                }
            });
        }