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 SelectTrackCommand : Command
    {
        public override string Name => "{\"button\":\"selectTrack-";

        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;
            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, "Персональный режим");

                //SqlCommand updTag = new SqlCommand("UPDATE Users SET track = @track WHERE chatId = @chatId;", Con);
                //updTag.Parameters.AddWithValue("@chatId", chatId);
                //updTag.Parameters.AddWithValue("@track", track);
                //updTag.ExecuteNonQuery();


                var user = db.Users.Single(usr => usr.chatId == chatId);

                //SqlCommand getUser = new SqlCommand("SELECT * FROM Users WHERE chatId = @chatId;", Con);
                //getUser.Parameters.AddWithValue("@chatId", chatId);
                //SqlDataReader rgetUser = getUser.ExecuteReader();
                //rgetUser.Read();
                //int choosenTrack = Convert.ToInt32(rgetUser["track"]);
                //rgetUser.Close();
                ////age = (DateTime.Today.Year - birthday.Year);


                
                switch (track)
                {
                    case 1:
                        @params.Message =
                            "Рекомендации для поддержания массы тела:" +
                            "\n\n" +
                            "Режим питания: 3 - 4 разовое питание, из них 3 основных приема пищи (завтрак, обед и ужин) и 1 дополнительный прием.\n" +
                            "Распределение объема пищи в течение дня должно быть следующим: завтрак – 20-30%, обед – 30-40%, полдник – 5-10%, ужин – 20-30%.\n" +
                            "В рационе питания должно быть на килограмм массы тела: белков 1,4-2,0 грамма, жиров 1,0-1,1 грамма и углеводов 2,4-3,0 грамма." +
                            "\n\n" +
                            "Жмите \"Рацион питания\", чтобы увидеть список рекомендуемых и нерекомендуемых продуктов.\n" +
                            "\"Примерное меню\" поможет Вам составить персональное меню." +
                            "\n\n" +
                            "Если Вас не устраивает данный рацион и Вам необходима индивидуальная консультация специалиста, то выберете трек \"Персональный режим\"";

                        break;

                    case 2:
                        @params.Message =
                            "Рекомендации для снижения жировой массы тела:" +
                            "\n\n" +
                            "Режим питания: 4 - 5 разового питание, из них 3 основных приема пищи (завтрак, обед и ужин) и 1-2 дополнительных приема.\n" +
                            "Распределение объема пищи в течение дня должно быть следующим: завтрак – 20-30%, обед – 30-40%, полдник – 5-10%, ужин – 20-30%, второй завтрак (5-10%) и второй ужин (до 5%).\n" +
                            "В рационе питания должно быть на килограмм массы тела: белков 1,2-1,7 грамма, жиров 0,9-1,0 грамма и углеводов 2,0-2,6 грамма." +
                            "\n\n" +
                            "Жмите \"Рацион питания\", чтобы увидеть список рекомендуемых и нерекомендуемых продуктов.\n" +
                            "\"Примерное меню\" поможет Вам составить персональное меню." +
                            "\n\n" +
                            "Если Вас не устраивает данный рацион и Вам необходима индивидуальная консультация специалиста, то выберете трек \"Персональный режим\"";

                        break;

                    case 3:
                        @params.Message =
                            "Рекомендации для набора мышечной массы тела:" +
                            "\n\n" +
                            "Режим питания: 4 - 5 разового питание, из них 3 основных приема пищи (завтрак, обед и ужин) и 1-2 дополнительных приема.\n" +
                            "Распределение объема пищи в течение дня должно быть следующим: завтрак – 20-30%, обед – 30-40%, полдник – 5-10%, ужин – 20-30%, второй завтрак (5-10%) и второй ужин (до 5%).\n" +
                            "В рационе питания должно быть на килограмм массы тела: белков 1,6-2,2 грамма, жиров 1,1-1,2 грамма и углеводов 2,8-3,4 грамма." +
                            "\n\n" +
                            "Жмите \"Рацион питания\", чтобы увидеть список рекомендуемых и нерекомендуемых продуктов.\n" +
                            "\"Примерное меню\" поможет Вам составить персональное меню." +
                            "\n\n" +
                            "Если Вас не устраивает данный рацион и Вам необходима индивидуальная консультация специалиста, то выберете трек \"Персональный режим\"";

                        break;

                    case 4:
                        @params.Message =
                            "⚠Персональный режим определяется после консультации со специалистом.\n\n" +
                            "Консультация включает: \n\n" +
                            "- определение и оценка состава тела\n" +
                            "- коррекция рациона питания\n" +
                            "- оценка функционального состояния\n" +
                            "- психофизиологическое тестирование\n\n" +
                            "📍Консультации проводятся по субботам по адресу: г. Киров, ул. Молодой Гвардии, д.13.\n" +
                            "☎Тел. 70-81-22.\n" +
                            "Стоимость и условия по телефону. \n\n" +
                            "Специалист: Кадочникова Наталья Ивановна.\n\n" +
                            "Чтобы узнать подробнее, нажмите кнопку \"О специалисте\"\n\n" +
                            "Вы можете оформить заявку на запись. Для этого нажмите кнопку \"Оставить заявку\".\n" +
                            "Ваши данные будут отправлены менеджеру, с Вами свяжутся для уточнения даты и времени консультации.";

                        keyboardBuilder
                            .AddButton("Оставить заявку", "selectSubmitConsultation", KeyboardButtonColor.Positive)
                            .AddLine()
                            .AddButton("О специалисте", "selectMoreAboutSpec", KeyboardButtonColor.Primary)
                            .AddLine()
                            .AddButton("Назад", "startPL", KeyboardButtonColor.Default);

                        @params.Keyboard = keyboardBuilder.Build();
                        @params.UserId = chatId;
                        @params.RandomId = GetRandomId();
                        client.Messages.SendAsync(@params);

                        return;
                }

                //keyboardBuilder
                //            .AddButton("💬Консультация", "selectLiveConsultation", KeyboardButtonColor.Primary)
                //            .AddLine()
                //            //.AddButton(cons, "selectGotConsultation", KeyboardButtonColor.Primary)
                //            //.AddLine()                        
                //            .AddButton("Назад", "selectCalculatorCcal", KeyboardButtonColor.Default);

                if (track != 4) // && choosenTrack == 0)
                {
                    if (user.track != track)
                    {
                        keyboardBuilder
                        .AddButton(colors[track] + "Выбрать этот трек", "selectChooseTrack-" + track, KeyboardButtonColor.Positive)
                        .AddLine();
                    }

                    keyboardBuilder
                        .AddButton("Рацион питания", "selectRation-" + track, KeyboardButtonColor.Primary)
                        //.AddButton("Примерное меню", "selectExampleMenu-" + track, KeyboardButtonColor.Primary)
                        .AddLine()
                        .AddButton("Персональный режим", "selectTrack-4", KeyboardButtonColor.Primary)
                        .AddLine()
                        .AddButton("Назад", "startPL", KeyboardButtonColor.Default);
                }
                //else if (track != 0 && choosenTrack != 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 = "‼Ошибка в SelectTrackCommand: " + ee.Message;
                @params.Attachments = null;
                @params.Keyboard = null;
                @params.UserId = 59111081;
                @params.RandomId = GetRandomId();
                client.Messages.SendAsync(@params);
            }
        }
    }
}