using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ScaffoldingExample.Helpers;

namespace ScaffoldingExample.Models
{
    public class DB
    {
        public static Model1Container DataModel
        {
            get
            {
                return new Model1Container();
            }
        }

        /// <summary>
        /// Инициализация настроек, если они пусты
        /// </summary>
        public static void InitSettingsData()
        {
            Model1Container db = DataModel;

            if (db.Settings.Count() == 0)
            {
                Setting GRID_PAGE_SIZE = new Setting()
                {
                    Key = "GRID_PAGE_SIZE",
                    Value = @"15",
                    VType = "POSITIVE_INT",
                    Description = "Количество записей на одной странице списка"
                };

                db.Settings.Add(GRID_PAGE_SIZE);
                db.SaveChanges();
            }
        }

        /// <summary>
        /// Класс чтения настроек
        /// </summary>
        public static class SETTINGS
        {

            /// <summary>
            /// Функция чтения настроек из БД в виде строки
            /// </summary>
            public static string getSettingStr(string distanceParam)
            {
                string Result = DataModel.Settings.Single(x => x.Key == distanceParam).Value;
                return Result;
            }

            /// <summary>
            /// Функция чтения настроек из БД в виде целого числа
            /// </summary>
            public static int getSettingInt(string distanceParam)
            {
                int Result;
                string temp = DataModel.Settings.Single(x => x.Key == distanceParam).Value;
                Result = int.Parse(temp);

                return Result;
            }

            /// <summary>
            /// Функция чтения настроек из БД в виде TimeSpan
            /// </summary>
            public static TimeSpan getSettingTimeSpan(string Param)
            {
                TimeSpan Result;
                string temp = DataModel.Settings.Single(x => x.Key == Param).Value;
                Result = TimeSpan.ParseExact(temp, DateTimeHelper.TimespanFormat, null);
                return Result;
            }


            /// <summary>
            /// Функция чтения настроек из БД в виде действительного числа
            /// </summary>
            public static double getSettingDouble(string param)
            {
                double Result;
                string temp = DataModel.Settings.Single(x => x.Key == param).Value;
                Result = double.Parse(temp);

                return Result;
            }

            /// <summary>
            /// Функция чтения настроек из БД в виде даты
            /// </summary>
            public static DateTime getSettingDate(string param)
            {
                DateTime Result;
                string temp = DataModel.Settings.Single(x => x.Key == param).Value;
                Result = DateTime.ParseExact(temp, DateTimeHelper.DateRusFormat, null);

                return Result;
            }

            public static int SettingGridPageSize
            {
                get
                {
                    int Result = getSettingInt("GRID_PAGE_SIZE");
                    return Result;
                }
            }

        }

    }
}