public IActionResult GetHistorico(string username, string remove)
        {
            if (remove == "true")
            {
                historicoHandling.removeHistorico(username);
            }

            Historico[] his = historicoHandling.getHistorico(username);

            var map = new Dictionary<int, int>();

            foreach (Historico h in his)
            {
                if (!map.ContainsKey(h.idReceita))
                {
                    if (h.NrPasso == 1 || h.NrPasso == 2)
                        map.Add(h.idReceita, 1);
                }
                else
                {
                    if (h.NrPasso == 1 || h.NrPasso == 2)
                        map[h.idReceita]++;
                }
            }

            Dictionary<Receita, int> mapreceita = new Dictionary<Receita, int>();
            Dictionary<Receita, (double, double)> mapreceitatempo = new Dictionary<Receita, (double, double)>();

            Dictionary<int, int>.KeyCollection keyColl = map.Keys;
            int count = 0;
            foreach (int i in keyColl)
            {
                // numero de vezes
                Receita r = receitaHandling.getReceita(i);
                mapreceita.Add(r, map[i]);
                count += map[i];

                // melhor tempo
                int nr_passos = receitapassoHandling.getNrPassosdaReceita(i);
                List<int> rpassos = receitapassoHandling.getPassosDaReceita(i);
                double estimado = getTempoReceita(rpassos);
                double melhor_tempo = historicoHandling.getMelhorTempoReceita(username, i, nr_passos);
                var t = (estimado, melhor_tempo);
                mapreceitatempo.Add(r, t);
            }

            HistoricoStat hs = new HistoricoStat();
            hs.num_receitas = mapreceita;
            hs.total_realizadas = count;
            hs.tempos = mapreceitatempo;
            return View(hs);
        }
        public IActionResult SelectReceita(int id)
        {
            ReceitaTotal              res              = new ReceitaTotal();
            Receita                   recipe           = receitaHandling.getReceita(id);
            int                       nrpassos         = receitapassoHandling.getNrPassosdaReceita(id);
            Dictionary <int, string>  desc_passos      = new Dictionary <int, string>();
            Dictionary <int, Receita> passo_subreceita = new Dictionary <int, Receita>();
            List <Comentario>         coments          = comentarioHandling.getComentariosReceita(id);
            List <int>                idPassos         = receitapassoHandling.getPassosDaReceita(id);
            List <Passo>              passos           = new List <Passo>();
            List <Ingrediente>        ingredientes     = new List <Ingrediente>();
            List <Utensilio>          utensilios       = new List <Utensilio>();

            foreach (int i in idPassos)
            {
                // Passo
                Passo p = passoHandling.selectPasso(i);
                passos.Add(p);

                // Ação
                Acao ac = acaoHandling.selectAcao(p.idAcao);

                // Ingrediente
                Ingrediente ing = ingredienteHandling.selectIngrediente(p.idIngrediente);

                // Descrição
                string desc_passo;
                if (ing != null)
                {
                    desc_passo = new string(ac.Descricao + " " + p.Quantidade + " " +
                                            p.Unidade + " " + ing.Nome + " " + p.Extra +
                                            ".");
                    if (!ingredientes.Contains(ing))
                    {
                        ingredientes.Add(ing);
                    }
                }
                else
                {
                    desc_passo = new string(ac.Descricao + " " + p.Quantidade + " " +
                                            p.Unidade + " " + p.Extra +
                                            ".");
                }
                desc_passos.Add(receitapassoHandling.getPassoDaReceita(id, i), desc_passo);

                // Subreceita
                if (p.idReceita != -1)
                {
                    passo_subreceita.Add(receitapassoHandling.getPassoDaReceita(id, i), receitaHandling.getReceita(p.idReceita));
                }

                // Utensílios
                List <UtensilioPasso> ups = utensiliopassoHandling.selectUtensiliosPassos(i);
                foreach (UtensilioPasso up in ups)
                {
                    Utensilio u = utensilioHandling.selectUtensilio(up.IdUtensilio);
                    if (!utensilios.Contains(u))
                    {
                        utensilios.Add(u);
                    }
                }
            }

            res.rec              = recipe;
            res.pass             = passos;
            res.desc_passos      = desc_passos;
            res.passo_subreceita = passo_subreceita;
            res.coments          = coments;
            res.nrpassos         = nrpassos;
            res.ingredientes     = ingredientes;
            res.utensilios       = utensilios;
            return(View(res));
        }