/// <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(); } }); }