public async Task <IActionResult> Edit(int id, [Bind("QuestionId,Difficulty,Type,Question,Answer1,Answer2,Answer3,Answer4,CorrectAnswer,CategoryId,SubcategoryId,AdditionalCategoryId,AdditionalSubcategoryId,MoreInformation,Pronunciation,QuestionCreator,DateOfCreation,Comments,TimesAnswered,LastDateAnswered")] Gamequestions gamequestions)
        {
            if (id != gamequestions.QuestionId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(gamequestions);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!GamequestionsExists(gamequestions.QuestionId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Details), new { id = gamequestions.QuestionId }));
            }
            return(View(gamequestions));
        }
        public async Task <IActionResult> Create([Bind("QuestionId,Difficulty,Type,Question,Answer1,Answer2,Answer3,Answer4,CorrectAnswer,CategoryId,SubcategoryId,AdditionalCategoryId,AdditionalSubcategoryId,MoreInformation,Pronunciation,QuestionCreator,DateOfCreation,Comments,TimesAnswered,LastDateAnswered")] Gamequestions gamequestions)
        {
            if (ModelState.IsValid)
            {
                _context.Add(gamequestions);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(gamequestions));
        }
        // GET: QuestionsPreviewFromStack/BuildStack/5
        public ActionResult BuildStack(int id)
        {
            try
            {
                var stackQuery = _context.Questionstacks.Where(sq => sq.StackId == id)
                                 .Select(sq => new Questionstacks
                {
                    Stack = sq.Stack, StackId = sq.StackId, Type = sq.Type, Timestamp = sq.Timestamp
                });

                if (!stackQuery.Any())
                {
                    return(NotFound());
                }

                Questionstacks questionstack = stackQuery.FirstOrDefault() ?? new Questionstacks();

                short totalQuestions = 0;
                totalQuestions = questionstack.MaximumQuestionNumberPerStack;

                _context.Questionstackitems.RemoveRange(_context.Questionstackitems.Where(x => x.StackId == id));

                for (int i = 1; i <= totalQuestions; i++)
                {
                    string MapType    = MappingType.ToString();
                    int    difficulty = _context.Qleveldifficultymaping.FirstOrDefault(x => x.Level == i && x.Maping == MapType).Difficulty;
                    int    type       = _context.Qleveldifficultymaping.FirstOrDefault(x => x.Level == i && x.Maping == MapType).Type;
                    if (questionstack.StackType == QuestionTypeDescription.Qualification)
                    {
                        difficulty = ((i + 1) % 2) + 1;                                                                 //alternate 1-2-1-2
                    }
                    long RndQuestionId              = -1;
                    int  RndCategoryId              = -1;
                    int  RndSubcategoryId           = -1;
                    int  RndAdditionalCategoryId    = -1;
                    int  RndAdditionalSubcategoryId = -1;

                    Gamequestions randomquestion = null;
                    if (UseNewQuestions)
                    {
                        randomquestion = _context.GetRandomlySelectedQuestion(id, type, difficulty, 0);
                    }

                    if (UseOldQuestions && randomquestion == null)
                    {
                        randomquestion = _context.GetRandomlySelectedQuestion(id, questionstack.Type, difficulty, 1);
                    }

                    if (randomquestion != null)
                    {
                        RndQuestionId              = randomquestion.QuestionId;
                        RndCategoryId              = randomquestion.CategoryId;
                        RndSubcategoryId           = randomquestion.SubcategoryId;
                        RndAdditionalCategoryId    = randomquestion.AdditionalCategoryId ?? -1;
                        RndAdditionalSubcategoryId = randomquestion.AdditionalSubcategoryId ?? -1;
                    }

                    _context.Questionstackitems.Add(new Questionstackitems
                    {
                        StackId                 = id,
                        StackLevel              = i,
                        QuestionId              = RndQuestionId,
                        CategoryId              = RndCategoryId,
                        SubcategoryId           = RndSubcategoryId,
                        AdditionalCategoryId    = RndAdditionalCategoryId,
                        AdditionalSubcategoryId = RndAdditionalSubcategoryId
                    });
                    _context.SaveChanges();
                }
                TempData["SuccessMessage"] = "Stack is built successfully";
            }
            catch (Exception e)
            {
                TempData["ErrorMessage"] = e.StackTrace ?? "Error";
            }

            return(RedirectToAction(nameof(Index), new { id }));
        }