private async Task <(SendMessageInput model, bool toast)> Command(MessageModel myMessage) { var buttonId = myMessage.AuxData == null ? "" : myMessage.AuxData.ButtonId; var chatId = myMessage.ChatId; var messageText = myMessage.Text; var userDataEntity = await _userDataService.GetUserData(chatId); var model = new SendMessageInput { Keypad = new KeypadModel { Rows = new List <KeypadRowModel>() }, ReplyTimeout = Variables.ReplyTimeout, ChatId = chatId }; if (string.IsNullOrEmpty(buttonId) && userDataEntity != null) { return(await InvalidCommand(model, userDataEntity.StateId)); } if (!string.IsNullOrEmpty(buttonId) && userDataEntity != null) { var button = await _buttonService.GetButton(buttonId); if (button == null || button.StateId != userDataEntity.StateId) { return(await InvalidCommand(model, userDataEntity.StateId)); } } //start if (userDataEntity == null) { await _userDataService.Update(chatId, 1); model.Keypad = await _keypadService.GenerateButtonsAsync(1, new UserInfoEntity()); model.Text = Messages.WelcomeMessage; return(model, false); } else if (buttonId == "1-1") // firsname { await _userDataService.Update(chatId, 1); var info = await _userInfoService.UpdateFirsName(chatId, messageText); model.Keypad = await _keypadService.GenerateButtonsAsync(1, info); model.Text = null; return(model, false); } else if (buttonId == "1-2") // lastname { await _userDataService.Update(chatId, 1); var info = await _userInfoService.UpdateLastName(chatId, messageText); model.Keypad = await _keypadService.GenerateButtonsAsync(1, info); model.Text = null; return(model, false); } else if (buttonId == "1-3") // povince { await _userDataService.Update(chatId, 1); var province = await _provinceService.GetProvinceAsync(messageText); var info = new UserInfoEntity(); if (province != null) { info = await _userInfoService.UpdateProvince(chatId, province.Id, province.Name); } else { info = await _userInfoService.GetUserInfo(chatId); } model.Keypad = await _keypadService.GenerateButtonsAsync(1, info); model.Text = null; return(model, false); } else if (buttonId == "1-4") // city { await _userDataService.Update(chatId, 1); var info = await _userInfoService.GetUserInfo(chatId); var city = await _provinceService.GetCityAsync(info.ProvinceId.Value, messageText); if (city != null) { info = await _userInfoService.UpdateCity(chatId, city.Id, city.Name); } model.Keypad = await _keypadService.GenerateButtonsAsync(1, info); model.Text = null; return(model, false); } else if (buttonId == "1-5") // population status { await _userDataService.Update(chatId, 1); var populationStatus = Utility.EnumValue.GetPopulationEnumByValue(messageText); var info = new UserInfoEntity(); if (populationStatus.HasValue) { info = await _userInfoService.UpdatePopulationStatus(chatId, populationStatus.Value, messageText); } else { info = await _userInfoService.GetUserInfo(chatId); } model.Keypad = await _keypadService.GenerateButtonsAsync(1, info); model.Text = null; return(model, false); } else if (buttonId == "1-6") // mobile { await _userDataService.Update(chatId, 1); var info = new UserInfoEntity(); if (messageText.Length == 11 && messageText.StartsWith("09")) { info = await _userInfoService.UpdateMobile(chatId, messageText); model.Text = null; } else { info = await _userInfoService.GetUserInfo(chatId); model.Text = Messages.InvalidMobileNumber; } model.Keypad = await _keypadService.GenerateButtonsAsync(1, info); return(model, false); } else if (buttonId == "1-submit") { var info = await _userInfoService.GetUserInfo(chatId); model.Keypad = await _keypadService.GenerateButtonsAsync(2, info); await _userDataService.Update(chatId, 2); model.Text = null; return(model, false); } else if (buttonId == "2-1") // address { await _userDataService.Update(chatId, 2); var info = await _userInfoService.UpdateAddress(chatId, messageText); model.Keypad = await _keypadService.GenerateButtonsAsync(2, info); model.Text = null; return(model, false); } else if (buttonId == "2-2") // postalcode { await _userDataService.Update(chatId, 2); UserInfoEntity info; if (messageText.Length == 10) { info = await _userInfoService.UpdatePostalCode(chatId, messageText); model.Text = null; } else { info = await _userInfoService.GetUserInfo(chatId); model.Text = Messages.InvalidPostalCode; } model.Keypad = await _keypadService.GenerateButtonsAsync(2, info); return(model, false); } else if (buttonId == "2-3") // birthdate { await _userDataService.Update(chatId, 2); var info = await _userInfoService.UpdateBirthDate(chatId, messageText); model.Keypad = await _keypadService.GenerateButtonsAsync(2, info); model.Text = null; return(model, false); } else if (buttonId == "2-4") // national code { await _userDataService.Update(chatId, 2); var userInfo = new UserInfoEntity(); if (messageText.Length != 10 || !messageText.IsValidNationalCode()) { userInfo = await _userInfoService.GetUserInfo(model.ChatId); model.Text = Messages.InvalidNationalCode; } else { userInfo = await _userInfoService.UpdateNationalCode(chatId, messageText); model.Text = null; } model.Keypad = await _keypadService.GenerateButtonsAsync(2, userInfo); return(model, false); } else if (buttonId == "2-5") // position { await _userDataService.Update(chatId, 2); var position = EnumValue.GetPositionEnumByValue(messageText); UserInfoEntity info; if (position.HasValue) { info = await _userInfoService.UpdatePosition(chatId, position.Value, messageText); } else { info = await _userInfoService.GetUserInfo(chatId); } model.Keypad = await _keypadService.GenerateButtonsAsync(2, info); model.Text = null; return(model, false); } else if (buttonId == "2-submit") { await _userDataService.Update(chatId, 3); var info = await _userInfoService.GetUserInfo(chatId); model.Keypad = await _keypadService.GenerateButtonsAsync(3, info); if (string.IsNullOrEmpty(info.VideoSrc))//First time for upload { model.Text = Messages.UploadGreeting; await _messengerService.SendMessage(model); } model.Text = null; return(model, false); } else if (buttonId == "2-return") { await _userDataService.Update(chatId, 1); var info = await _userInfoService.GetUserInfo(chatId); model.Keypad = await _keypadService.GenerateButtonsAsync(1, info); model.Text = null; return(model, false); } else if (buttonId == "3-1") // video { await _userDataService.Update(chatId, 3); var upload = await UploadVideo(chatId, myMessage); if (!string.IsNullOrEmpty(upload.fileSrc)) { var info = await _userInfoService.UpdateVideo(chatId, upload.fileSrc); model.Keypad = await _keypadService.GenerateButtonsAsync(3, info); return(model, false); } else { var info = await _userInfoService.GetUserInfo(chatId); model.Keypad = await _keypadService.GenerateButtonsAsync(3, info); if (upload.error == UploadErrorEnum.OverSize) { model.Text = Messages.OverSizeVideo; } else if (upload.error == UploadErrorEnum.InvalidExtension) { model.Text = Messages.InvalidFileExtension; } else if (upload.error == UploadErrorEnum.UploadIssue) { model.Text = Messages.FileNotUploaded; } return(model, true); } } //else if (buttonId == "3-submit") //{ // await _userDataService.Update(chatId, 3); // var info = await _userInfoService.GetUserInfo(chatId); // model.Keypad = await _keypadService.GenerateButtonsAsync(4, info); // model.Text = null; // return (model, false); //} else if (buttonId == "3-return") { await _userDataService.Update(chatId, 2); var info = await _userInfoService.GetUserInfo(chatId); model.Keypad = await _keypadService.GenerateButtonsAsync(2, info); model.Text = null; return(model, false); } return(await InvalidCommand(model, userDataEntity.StateId)); }