Files
Parasha/SvetoforVKBot/Models/Commands/LK/Tracks/SelectExampleMenuCommand.cs
2021-10-19 06:04:52 +03:00

316 lines
22 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<int, string> colors = new Dictionary<int, string>(3);
colors.Add(1, "🟩"); //З
colors.Add(2, "🟦"); //C
colors.Add(3, "🟨"); //Ж
Dictionary<int, string> tracks = new Dictionary<int, string>(7);
tracks.Add(1, "Оптимизация питания");
tracks.Add(2, "Снижение жировой массы");
tracks.Add(3, "Увеличение мышечной массы");
tracks.Add(4, "Персональный режим");
var user = db.Users.Single(usr => usr.chatId == chatId);
List<int> sportDays = JsonConvert.DeserializeObject<List<int>>(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<int> sportDays = JsonConvert.DeserializeObject<List<int>>(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<int, string> days = new Dictionary<int, string>(7);
days.Add(1, "Понедельник");
days.Add(2, "Вторник");
days.Add(3, "Среда");
days.Add(4, "Четверг");
days.Add(5, "Пятница");
days.Add(6, "Суббота");
days.Add(7, "Воскресенье");
Dictionary<int, string> gend = new Dictionary<int, string>(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);
}
}
}
}