public async Task <IProgramResponse> AddOrUpdateApplicationAnswerAsync(ProgramAnswerViewModel model)
        {
            try
            {
                //if (model.Answers.Count == 0)
                //{
                //    List<ApplicationAnswerViewModel> _model = new List<ApplicationAnswerViewModel>();
                //    _model.Add(new ApplicationAnswerViewModel() {
                //    QuestionId = 165,
                //    QuestionType = ApplicationQuestionType.Text,
                //    Text = "Test Answer"

                //    });
                //    _model.Add(new ApplicationAnswerViewModel()
                //    {
                //        QuestionId = 141,
                //        QuestionType = ApplicationQuestionType.MultiSelect,
                //        SelectedOptionId = 134
                //    });
                //    _model.Add(new ApplicationAnswerViewModel()
                //    {
                //        QuestionId = 170,
                //        QuestionType = ApplicationQuestionType.MultipleChoice,
                //        MultipleChoice = "158,159"
                //    });

                //    model.Answers = _model;
                //}
                var userInfo = await _appDbContext.UserInfos.FirstOrDefaultAsync(k => k.Id == model.ProfileId);

                if (userInfo == null)
                {
                    return(new ProgramResponse(ClientMessageConstant.ProfileNotExist, HttpStatusCode.NotFound));
                }
                var isExist = true;

                var appId = await GetApplicationIdAsync(model.ProfileId, model.BatchId, userInfo);

                foreach (var answer in model.Answers)
                {
                    var questionAnswer =
                        await _appDbContext.QuestionAnswers.Include(a => a.Questionansweroptions).FirstOrDefaultAsync(k =>
                                                                                                                      k.ProfileId == model.ProfileId && k.ApplicationId == appId && k.QuestionId == answer.QuestionId) ??
                        GetQuestionAnswer(answer, model.ProfileId, appId, ref isExist);

                    questionAnswer.ModifiedBy = userInfo.Email;
                    questionAnswer.CreatedBy  = userInfo.Email;

                    switch (answer.QuestionType)
                    {
                    case ApplicationQuestionType.Text:
                        questionAnswer.Text = answer.Text;
                        break;

                    case ApplicationQuestionType.MultiSelect:
                        //questionAnswer.SelectedOptionId = answer.SelectedOptionId;
                        break;

                    case ApplicationQuestionType.TrueOrFalse:
                        questionAnswer.YnquestionAnswer = answer.YesNoAnswer;
                        break;

                    case ApplicationQuestionType.Scale:
                        questionAnswer.Scale = answer.Scale;
                        break;

                    case ApplicationQuestionType.File:
                        questionAnswer.AnswerFileId = (await SaveFileAsync(answer.AnswerFile, model.ProfileId, (int)ApplicationQuestionType.File)).Id;
                        break;

                    case ApplicationQuestionType.VideoAttachment:
                        questionAnswer.AnswerFileId = (await SaveFileAsync(answer.AnswerFile, model.ProfileId, (int)ApplicationQuestionType.VideoAttachment)).Id;
                        break;
                    }

                    if (!isExist)
                    {
                        await _appDbContext.QuestionAnswers.AddAsync(questionAnswer);

                        await _appDbContext.SaveChangesAsync();

                        switch (answer.QuestionType)
                        {
                        case ApplicationQuestionType.MultiSelect:
                            _appDbContext.QuestionAnswerOptions.Add(new QuestionAnswerOption()
                            {
                                QuestionanswerID = questionAnswer.Id,
                                optionID         = answer.SelectedOptionId ?? 0
                            });

                            break;

                        case ApplicationQuestionType.MultipleChoice:
                            // questionAnswer.YnquestionAnswer = answer.YesNoAnswer;
                            char[] spearator = { ',' };
                            var    Ids       = answer.MultipleChoice.Split(spearator);
                            foreach (var item in Ids)
                            {
                                if (item != "")
                                {
                                    _appDbContext.QuestionAnswerOptions.Add(new QuestionAnswerOption()
                                    {
                                        QuestionanswerID = questionAnswer.Id,
                                        optionID         = Convert.ToInt32(item)
                                    });
                                }
                            }
                            break;
                        }
                        //await _appDbContext.SaveChangesAsync();
                    }
                    else
                    {
                        switch (answer.QuestionType)
                        {
                        case ApplicationQuestionType.MultiSelect:
                            if (questionAnswer.Questionansweroptions != null)
                            {
                                List <QuestionAnswerOption> _optionsdata = new List <QuestionAnswerOption>();
                                _optionsdata = questionAnswer.Questionansweroptions.ToList();
                                foreach (var item in _optionsdata)
                                {
                                    _appDbContext.QuestionAnswerOptions.Remove(item);
                                    await _appDbContext.SaveChangesAsync();
                                }
                            }

                            _appDbContext.QuestionAnswerOptions.Add(new QuestionAnswerOption()
                            {
                                QuestionanswerID = questionAnswer.Id,
                                optionID         = answer.SelectedOptionId ?? 0
                            });
                            await _appDbContext.SaveChangesAsync();

                            break;

                        case ApplicationQuestionType.MultipleChoice:
                            // questionAnswer.YnquestionAnswer = answer.YesNoAnswer;
                            if (questionAnswer.Questionansweroptions != null)
                            {
                                List <QuestionAnswerOption> _optionsdata = new List <QuestionAnswerOption>();
                                _optionsdata = questionAnswer.Questionansweroptions.ToList();
                                foreach (var item in _optionsdata)
                                {
                                    _appDbContext.QuestionAnswerOptions.Remove(item);
                                    await _appDbContext.SaveChangesAsync();
                                }
                            }
                            char[] spearator = { ',' };
                            var    Ids       = answer.MultipleChoice.Split(spearator);
                            foreach (var item in Ids)
                            {
                                if (item != "")
                                {
                                    _appDbContext.QuestionAnswerOptions.Add(new QuestionAnswerOption()
                                    {
                                        QuestionanswerID = questionAnswer.Id,
                                        optionID         = Convert.ToInt32(item)
                                    });
                                }
                            }

                            break;
                        }
                    }

                    await _appDbContext.SaveChangesAsync();
                }

                await _applicationProgressService.UpdateApplicationProgressAsync(appId, model.ProfileId, model.BatchId);

                return(new ProgramResponse());
            }
            catch (Exception e)
            {
                return(new ProgramResponse(e.Message, HttpStatusCode.InternalServerError));
            }
        }
        public async Task <IActionResult> AddOrUpdateApplicationAnswerAsync([FromForm] ProgramAnswerViewModel answerViewModel)
        {
            var data = await _programService.AddOrUpdateApplicationAnswerAsync(answerViewModel);

            return(Ok(data));
        }