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

namespace ScaffoldingExample.Helpers
{
    public static class DataTableHelper
    {
        /// <summary>
        /// Установка сессионной переменной для клиентского списка данных
        /// </summary>
        /// <param name="session">Сессия</param>
        /// <param name="DtVarIdName">Сессионная переменная</param>
        /// <param name="dataCount">Есть ли данные, например data.Count() > 0</param>
        /// <param name="dataCountWithId">Есть ли запись с заданным Id, например (data.Count(x => x.Id == id) > 0)</param>
        /// <param name="dataMinId">Минимальное значение данных, например data.Min(x => x.Id)</param>
        public static void InitDtVarIdName(HttpSessionStateBase session, string DtVarIdName, Func<bool> dataCount, Func<int,bool> dataCountWithId, Func<int> dataMinId)
        {
            if (dataCount() == true)
            {
                //Не нужно инициализировать первым значением
                bool InitFlag = false;
                //Чтение объекта из сессионной переменной
                object obj = session[DtVarIdName];
                if (obj == null)
                {
                    //Если переменной нет в сессии, ее нужно установить
                    InitFlag = true;
                }
                else
                {
                    int id = (int)obj;
                    //Если переменной нет в текущем фильтре, ее также требуется установить
                    bool isFound = dataCountWithId(id);
                    if (isFound == false)
                    {
                        InitFlag = true;
                    }
                }

                //Если флаг установлен, то установка переменной
                if (InitFlag == true)
                {
                    //Набор данных соответствует текущему контроллеру
                    int dtid = dataMinId();
                    //Установка  номера текущей строки в DataTable
                    session.Add(DtVarIdName, dtid);
                }
            }
        }

    }
}