public async Task <IHttpActionResult> CheckMixTask(TrainingMixTask task)
        {
            if (task == null)
            {
                return(BadRequest("Invalid parameter"));
            }

            //Only for demo
            //await _service.SetTimeAsync(task.WordSuiteId);

            if (task.Answer.Count == 0 || task.Questions.Count == 0 || task.Answer.Count != task.Questions.Count)
            {
                return(BadRequest("Invalid model"));
            }

            task.Result = new List <bool>();
            for (int i = 0; i < task.Questions.Count; i++)
            {
                if (task.Questions[i].Synonyms != null)
                {
                    if (task.Questions[i].Synonyms.Count == 0)
                    {
                        return(BadRequest("Invalid model"));
                    }

                    var synonyms = await _wordTranslationService.GetAllWordSynonymsById(task.Questions[i].Synonyms[0].Id ?? default(int));

                    var result = synonyms.Exists(x => x.Value.ToLower() == task.Answer[i].ToLower());
                    task.Result.Add(result);

                    if (result)
                    {
                        _progressService.IncrementProgressOfOriginalWord(task.WordSuiteId, task.Answer[i]);
                    }
                }
                else if (task.Questions[i].Translation != null)
                {
                    var wordTranslation = await _wordTranslationService.GetByIdWithWordsAsync(task.Questions[i].Translation.Id ?? default(int));

                    if (wordTranslation != null)
                    {
                        task.Result.Add(wordTranslation.OriginalWord.Value.ToLower() == task.Answer[i].ToLower());
                    }
                    else
                    {
                        return(InternalServerError());
                    }
                }
                else if (task.Questions[i].Description != null)
                {
                    var word = await _wordService.GetWordByIdAsync(task.Questions[i].Description.Id ?? default(int));

                    if (word != null)
                    {
                        task.Result.Add(word.Value.ToLower() == task.Answer[i].ToLower());
                    }
                    else
                    {
                        return(InternalServerError());
                    }
                }
                else
                {
                    return(BadRequest("Invalid model"));
                }
            }

            return(Ok(task));
        }
        public async Task <IHttpActionResult> GetMixTask(int id)
        {
            var suite = await _service.GetWithNotStudiedWordsAsync(id);

            if (suite.OwnerId == UserId)
            {
                if (suite.QuizStartTime == null)
                {
                    suite.QuizStartTime = new DateTime();
                }
                if (((DateTime)suite.QuizStartTime).AddDays(1) < DateTime.Now)
                {
                    TrainingMixTask task = new TrainingMixTask();
                    task.WordSuiteId      = suite.Id;
                    task.WordSuiteName    = suite.Name;
                    task.QuizResponseTime = suite.QuizResponseTime;
                    task.Questions        = new List <MixTaskQuestionModel>();

                    foreach (var wordProgress in suite.WordProgresses)
                    {
                        var synonyms = await _wordTranslationService.GetAllWordSynonymsById(
                            wordProgress.WordTranslation.OriginalWordId);

                        if (synonyms.Count != 0)
                        {
                            var taskQuestion = new MixTaskQuestionModel()
                            {
                                Synonyms = synonyms
                            };
                            task.Questions.Add(taskQuestion);
                        }

                        var wordTranslation = wordProgress.WordTranslation;

                        if (wordTranslation.OriginalWord.Description != null)
                        {
                            var taskQuestion = new MixTaskQuestionModel()
                            {
                                Description = new WordValueModel {
                                    Id    = wordTranslation.OriginalWordId,
                                    Value = wordTranslation.OriginalWord.Description
                                }
                            };
                            task.Questions.Add(taskQuestion);
                        }

                        task.Questions.Add(new MixTaskQuestionModel()
                        {
                            Translation = new WordValueModel
                            {
                                Id    = wordTranslation.Id,
                                Value = wordTranslation.TranslationWord.Value
                            }
                        });
                    }

                    Shuffle(task.Questions);

                    return(Ok(task));
                }
                return(BadRequest(MessagesContainer.OneQuizPerDay));
            }
            return(BadRequest(MessagesContainer.NotYourQuiz));
        }