using System; using System.Data.SqlClient; using SvetoforVKBot.Models.Updates; using VkNet; using VkNet.Enums.SafetyEnums; using VkNet.Model.Keyboard; using VkNet.Model.RequestParams; using System.Text.RegularExpressions; using System.Collections.Generic; using System.Collections.ObjectModel; using Newtonsoft.Json; using System.Linq; namespace SvetoforVKBot.Models.Commands.LK.Tracks { public class SelectExampleMenuCommand : Command { public override string Name => "{\"button\":\"selectExampleMenu-"; public override void Execute(RootObject update, VkApi client, SvetoforVKBot.Data.SvetoforVKBotEntities db) { } public override void ExecutePL(RootObject update, VkApi client, SvetoforVKBot.Data.SvetoforVKBotEntities db) { var chatId = update.@object.message.from_id; MessagesSendParams @params = new MessagesSendParams(); Regex regex = new Regex("[^0-9]"); string msg = ""; var keyboardBuilder = new KeyboardBuilder().Clear(); int age = 0; int genderCoef = 0; double kkalResult = 0; double colorPercent = 0; double dayCoef = 0; double curDayKkal = 0; double kkalResultLow = 0; double kkalResultHigh = 0; try { string[] payload = update.@object.message.payload.Split('-'); int track = Convert.ToInt32(regex.Replace(payload[1], "")); Dictionary colors = new Dictionary(3); colors.Add(1, "🟩"); //З colors.Add(2, "🟦"); //C colors.Add(3, "🟨"); //Ж Dictionary tracks = new Dictionary(7); tracks.Add(1, "Оптимизация питания"); tracks.Add(2, "Снижение жировой массы"); tracks.Add(3, "Увеличение мышечной массы"); tracks.Add(4, "Персональный режим"); var user = db.Users.Single(usr => usr.chatId == chatId); List sportDays = JsonConvert.DeserializeObject>(user.sportDays); //SqlCommand getUser = new SqlCommand("SELECT * FROM Users WHERE chatId = @chatId;", Con); //getUser.Parameters.AddWithValue("@chatId", chatId); //SqlDataReader rgetUser = getUser.ExecuteReader(); //rgetUser.Read(); ////string fio = rgetUser["fio"].ToString(); //int choosenTrack = Convert.ToInt32(rgetUser["track"]); //int height = Convert.ToInt32(rgetUser["height"]); //int weight = Convert.ToInt32(rgetUser["weight"]); //int gender = Convert.ToInt32(rgetUser["gender"]); // 1 - М / 2 - Ж //var birthday = DateTime.Parse(rgetUser["birthday"].ToString()); //var activityCoef = Convert.ToDouble(rgetUser["activityCoef"]); //List sportDays = JsonConvert.DeserializeObject>(rgetUser["sportDays"].ToString()); //rgetUser.Close(); //age = (DateTime.Today.Year - birthday.Year); if ((DateTime.Now.Month >= user.birthday.Month) && (DateTime.Now.Day >= user.birthday.Day)) age = DateTime.Now.Year - user.birthday.Year; else age = DateTime.Now.Year - user.birthday.Year - 1; #region ccalCalculator Dictionary days = new Dictionary(7); days.Add(1, "Понедельник"); days.Add(2, "Вторник"); days.Add(3, "Среда"); days.Add(4, "Четверг"); days.Add(5, "Пятница"); days.Add(6, "Суббота"); days.Add(7, "Воскресенье"); Dictionary gend = new Dictionary(3); gend.Add(0, "Мужской"); gend.Add(1, "Мужской"); gend.Add(2, "Женский"); int curDay = (int)DateTime.Now.DayOfWeek; if (curDay == 0) curDay = 7; if (user.weight == 0 || user.height == 0) { keyboardBuilder .AddButton("📝Редактировать данные", "selectEditData-0", KeyboardButtonColor.Primary) .AddLine() .AddButton("Назад", "startPL", KeyboardButtonColor.Default); @params.Message = "Не хватает данных о росте/весе.\n" + "Нажмите \"📝Редактировать данные\" и заполните показатели."; @params.Keyboard = keyboardBuilder.Build(); @params.UserId = chatId; @params.RandomId = GetRandomId(); client.Messages.SendAsync(@params); return; } if (user.gender == 1) { genderCoef = 5; } else { genderCoef = -161; } switch (track) { case 1: //не изменяя веса colorPercent = 1; break; case 2: colorPercent = 0.75; //1 - 15% break; case 3: colorPercent = 1.2; //1 - 15% break; default: colorPercent = 1; break; } for (int i = 1; i <= 7; i++) { switch (i) { case 2: dayCoef = 0.8; break; case 3: dayCoef = 1.2; break; case 5: dayCoef = 0.9; break; case 6: dayCoef = 1.1; break; default: dayCoef = 1; break; } kkalResult = Math.Round((((10 * user.weight) + (6.25 * user.height) - (5 * age) + genderCoef) * user.activityCoef) * colorPercent * dayCoef); kkalResultHigh = Math.Round(kkalResult * 1.2); kkalResultLow = Math.Round(kkalResult * 0.9); if (i == curDay) { //@params.Message += $"⭐ {days[i]}: {kkalResultLow}-{kkalResultHigh} ккал\n"; curDayKkal = kkalResult; } //else //@params.Message += $"{days[i]}: {kkalResultLow}-{kkalResultHigh} ккал\n"; } #endregion ccalCalculator double belki_opt = 0; double zhiry_opt = 0; double uglevody_opt = 0; switch (track) { case 1: //Распределение объема пищи в течение дня должно быть следующим: завтрак – 20-30%, обед – 30-40%, полдник – 5-10%, ужин – 20-30%. //В рационе питания должно быть на килограмм массы тела: белков 1,4-2,0 грамма, жиров 1,0-1,1 грамма и углеводов 2,4-3,0 грамма. @params.Message = "Примерное меню" + "\n\n" + $"Пол: {gend[user.gender]} | Возраст: {age}\n" + $"Рост: {user.height} см | Масса тела: {user.weight} кг\n\n" + //"Активность: низкая (1-3 тренировки в неделю)\n" + $"Рекомендуемая норма КБЖУ:\n" + $"Калории {curDayKkal*0.9} - {curDayKkal*1.2}\n" + $"Белки {user.weight *1.4}-{user.weight *2} грамм\n" + $"Жиры {user.weight}-{user.weight *1.1} грамм\n" + $"Углеводы {user.weight *2.4}-{user.weight *3} грамм\n\n" + $"Завтрак (Максимальное количество калорий {curDayKkal*0.3})\n" + $"Белки – {user.weight * 2 * 0.3}, Жиры - {user.weight * 1.1 * 0.3}, Углеводы – {user.weight *3 * 0.3}.\n" + $"Рисовая каша на молоке 310 грамм, яблоко 340 грамм, черный кофе без сахара 400 грамм\n\n" + $"Обед (Максимальное количество калорий {curDayKkal * 0.4})\n" + $"Белки – {user.weight * 2 * 0.4}, Жиры - {user.weight * 1.1 * 0.4}, Углеводы – {user.weight * 3 * 0.4}.\n" + $"Борщ 380 грамм, бифштекс классический 90 грамм, картофельное пюре 120 грамм, винегрет 140 грамм, морс 220 грамм\n\n" + $"Полдник (Максимальное количество калорий {curDayKkal * 0.1})\n" + $"Белки – {user.weight * 2 * 0.1}, Жиры - {user.weight * 1.1 * 0.1}, Углеводы – {user.weight * 3 * 0.1}.\n" + $"Творожная запеканка 130 грамм, сметана 20% 10 грамм, яйцо 80 грамм, апельсиновый сок 270 грамм\n\n" + $"Ужин (Максимальное количество калорий {curDayKkal * 0.2})\n" + $"Белки – {user.weight * 2 * 0.2}, Жиры - {user.weight * 1.1 * 0.2}, Углеводы – {user.weight * 3 * 0.2}.\n" + $"Минтай отварной 290 грамм, рис белый вареный 80 грамм, салат из белокочанной капусты с морковью 120 грамм, чай зеленый без сахара 150 грамм\n" + $"\n" + //$"Всего: Калории 2083, Белки 124, Жиры 75, Углеводы 208\n\n" + $"Блюда, рекомендованные для оптимизации питания, в комбинате общественного питания промаркированы зеленым цветом." + $"\n\n" + $"Если Вас не устраивает данный рацион и Вам необходима индивидуальная консультация специалиста, то выберете трек \"Персональный режим\""; break; case 2: //Распределение объема пищи в течение дня должно быть следующим: завтрак – 20-30%, обед – 30-40%, полдник – 5-10%, ужин – 20-30%, второй завтрак (5-10%) и второй ужин (до 5%). //В рационе питания должно быть на килограмм массы тела: белков 1,2 - 1,7 грамма, жиров 0,9 - 1,0 грамма и углеводов 2,0 - 2,6 грамма. @params.Message = "Примерное меню" + "\n\n" + $"Пол: {gend[user.gender]} | Возраст: {age}\n" + $"Рост: {user.height} см | Масса тела: {user.weight} кг\n\n" + //"Активность: низкая (1-3 тренировки в неделю)\n" + $"Рекомендуемая норма КБЖУ:\n" + $"Калории {curDayKkal * 0.9} - {curDayKkal * 1.2}\n" + $"Белки {user.weight * 1.2}-{user.weight * 1.7} грамм\n" + $"Жиры {user.weight *0.9}-{user.weight} грамм\n" + $"Углеводы {user.weight * 2}-{user.weight * 2.6} грамм\n\n" + $"Первый завтрак (Максимальное количество калорий {curDayKkal * 0.3})\n" + $"Белки – {user.weight * 1.7 * 0.3}, Жиры - {user.weight * 0.3}, Углеводы – {user.weight * 2.6 * 0.3}.\n" + $"Омлет 230 грамм, яблоко 300 грамм, черный кофе без сахара 400 грамм\n" + $"Второй завтрак (Максимальное количество калорий {curDayKkal * 0.1}) " + $"Белки – {user.weight * 1.7 * 0.3}, Жиры - {user.weight * 0.3}, Углеводы – {user.weight * 2.6 * 0.3}.\n" + $"Сырники 110 грамм, сметана 20% 10 грамм, яйцо 70 грамм, апельсиновый сок 240 грамм\n\n" + $"Обед (Максимальное количество калорий {curDayKkal * 0.4})\n" + $"Белки – {user.weight * 1.7 * 0.4}, Жиры - {user.weight * 0.4}, Углеводы – {user.weight * 2.6 * 0.4}.\n" + $"Борщ 340 грамм, семга стейк на гриле 120 грамм, рис белый вареный 80 грамм, салат из белокочанной капусты с морковью 180 грамм, хлеб зерновой 25 грамм, морс 200 грамм\n\n" + $"Полдник (Максимальное количество калорий {curDayKkal * 0.05})\n" + $"Белки – {user.weight * 1.7 * 0.1}, Жиры - {user.weight * 0.1}, Углеводы – {user.weight * 2.6 * 0.1}.\n" + $"Творожная запеканка 130 грамм, сметана 20% 10 грамм, яйцо 80 грамм, апельсиновый сок 270 грамм\n\n" + $"Ужин (Максимальное количество калорий {curDayKkal * 0.3})\n" + $"Белки – {user.weight * 1.7 * 0.2}, Жиры - {user.weight * 0.2}, Углеводы – {user.weight * 2.6 * 0.2}.\n" + "Говядина вареная 80 грамм, картофель вареный 90 грамм, салат цезарь с креветками 80 грамм, хлеб зерновой 25 грамм, чай черный без сахара 150 грамм\n\n" + //"Всего: Калории 1904, Белки 101, Жиры 78, Углеводы 170" + //"\n\n" + "Блюда, рекомендованные для оптимизации питания, в комбинате общественного питания промаркированы зеленым цветом." + "\n\n" + "Если Вас не устраивает данный рацион и Вам необходима индивидуальная консультация специалиста, то выберете трек \"Персональный режим\""; break; case 3: @params.Message = "Примерное меню" + "\n\n" + $"Пол: {gend[user.gender]} | Возраст: {age}\n" + $"Рост: {user.height} см | Масса тела: {user.weight} кг\n\n" + //"Активность: низкая (1-3 тренировки в неделю)\n" + "Рекомендуемая норма КБЖУ: Калории 2474-2824 Белки 112-156 грамм, Жиры 77-84 грамм, Углеводы 196-238 грамм\n" + "Первый завтрак (Максимальное количество калорий 677) Калории - 554, Белки – 24, Жиры -24, Углеводы – 60.\n" + "Рисовая каша на молоке 370 грамм, яйцо 120 грамм, черный кофе без сахара 400 грамм\n" + "Второй завтрак (Максимальное количество калорий 649) Калории - 618, Белки - 35, Жиры - 19, Углеводы – 70\n" + "Сырники 240 грамм, сметана 20% 10 грамм, апельсиновый сок 320 грамм\n" + "Обед (Максимальное количество калорий 931) Калории - 837, Белки - 41, Жиры - 35, Углеводы - 84\n" + "Борщ 400 грамм, стейк из филе куриного 120 грамм, гречневая каша 80 грамм, кетчуп 30 грамм, салат овощной 350 грамм, чай черный без сахара 150 грамм\n" + "Ужин (Максимальное количество калорий 564) Калории - 447, Белки - 65, Жиры - 7, Углеводы – 25\n" + "Треска отварная 350 грамм, рис белый вареный 90 грамм, салат греческий 80 грамм, чай зеленый 150 грамм\n" + "\n" + "Всего: Калории 2456, Белки 165, Жиры 85, Углеводы 239" + "\n\n" + "Блюда, рекомендованные для оптимизации питания, в комбинате общественного питания промаркированы зеленым цветом." + "\n\n" + "Если Вас не устраивает данный рацион и Вам необходима индивидуальная консультация специалиста, то выберете трек \"Персональный режим\""; break; } if (track != 4 && user.track == 0) { keyboardBuilder .AddButton(colors[track] + "Выбрать этот трек", "selectChooseTrack-" + track, KeyboardButtonColor.Positive) .AddLine() .AddButton("Рацион питания", "selectRation-" + track, KeyboardButtonColor.Primary) //.AddButton("Примерное меню", "selectExampleMenu-" + track, KeyboardButtonColor.Primary) .AddLine() .AddButton("Персональный режим", "selectTrack-4", KeyboardButtonColor.Primary) .AddLine() .AddButton("Назад", "selectTrack-" + track, KeyboardButtonColor.Default); } else if (track != 0 && user.track != 0) { keyboardBuilder .AddButton("Рацион питания", "selectRation-" + track, KeyboardButtonColor.Primary) //.AddButton("Примерное меню", "selectExampleMenu-" + track, KeyboardButtonColor.Primary) .AddLine() .AddButton("Персональный режим", "selectTrack-4", KeyboardButtonColor.Primary) .AddLine() .AddButton("Назад", "startPL", KeyboardButtonColor.Default); } @params.Keyboard = keyboardBuilder.Build(); @params.UserId = chatId; @params.RandomId = GetRandomId(); client.Messages.SendAsync(@params); } catch (Exception ee) { @params.Message = "‼Ошибка в SelectExampleMenuCommand: " + ee.Message; @params.Attachments = null; @params.Keyboard = null; @params.UserId = 59111081; @params.RandomId = GetRandomId(); client.Messages.SendAsync(@params); } } } }