public AulaVideoViewModel(Aula aula, PerguntaDAO pergDAO, int superInt, Personalidade pe)
        {
            this.aula = aula;
            this.pergDAO = new PerguntaDAO();
            this.SuperInteratividade = superInt;
            this.avatar = pe;
            PerguntaIndex = 0;
            QuestaoAColocar = "";

            int idAula = aula.Id;
            previousTimeStamp = 0;

            QuestoesPorOrdemTempo = new List<string>();
            RespostasPorOrdemTempo = new List<string>();
            FontesExtraPorOrdemTempo = new List<string>();
            TimeStampsIndexados = new List<int>();

            // Calcular questões desta aula de vídeo
            foreach (var pergunta in pergDAO.Pergunta)
            {
                if (pergunta.Aula == idAula)
                {
                    QuestoesPorOrdemTempo.Add(pergunta.Pergunta1);
                    RespostasPorOrdemTempo.Add(pergunta.Resposta);
                    FontesExtraPorOrdemTempo.Add(pergunta.FonteExtra);
                    TimeStampsIndexados.Add((int)pergunta.TimeStamp);
                }
            }
        }
        public JsonResult PreencherEspacosFim(RespExercicioViewModel values)
        {
            int alineasCorretas = 0;
            int percentagem = 0;

            // Contar nº de respostas certas
            for (int i = 0; i < values.Respostas.Length; i++)
            {
                if (pe.validaResposta(pe.Respostas[i], values.Respostas[i])==true)
                {
                    alineasCorretas++;
                }
            }

            // Calcular percentagem resultante da realização do exercício
            percentagem = (alineasCorretas * 100) / pe.Respostas.Count();
            ViewBag.Score = percentagem;


            var JaFezExercicio = ueDAO.UtilizadorExercicio.Where(usrex => usrex.Exercicio == values.Id && usrex.Utilizador == user.Id);

            if (JaFezExercicio.Count() == 0)
            {
                // O utilizador fez pela primeira vez o exercício portanto o mesmo é contabilizado em termos de progresso
                user.TotalExercicios++;
            }

            user.TotalAlineas += values.Respostas.Count();
            if (percentagem >= 50)
            {
                user.ExerciciosPositivos++; // Incrementar número de exercício positivos
            }
            user.TotalAlineasCorretas += alineasCorretas;

            try
            {
                userDAO.Entry(user).State = System.Data.Entity.EntityState.Modified;
                try
                {
                    UtilizadorExercicio ue = new UtilizadorExercicio();
                    ue.Utilizador = user.Id;
                    ue.Exercicio = values.Id;
                    ue.AlineasCorretas = alineasCorretas;
                    ue.Data = System.DateTime.Now;
                    
                    ueDAO.UtilizadorExercicio.Add(ue);

                    // Se ambas as inserções ocorrerem com sucesso guardo novo estado da base de dados
                    userDAO.SaveChanges();
                    ueDAO.SaveChanges();
                }
                catch (System.Data.SqlClient.SqlException) { }
            }
            catch (System.Data.SqlClient.SqlException) { }

            Personalidade pers = new Personalidade();
            Personalidade.FALA_ATUAL = pers.getFalaResultadoDeExercicio(percentagem);


            string color = "red";
            if (percentagem > 50) { color = "green"; }
            string res = pe.getTextoSolucao() + "<br><br>" + "Resulado: <b style=\"font-size: 24px; color: "+color+";\">" + percentagem + "%</b>";

            return Json(res);
        }