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

namespace QuickForm
{
    /// <summary>
    /// Тип действия
    /// </summary>
    public enum QuickFormActionType
    {
        Create, Edit, Delete, Index
    }


    /// <summary>
    /// Модель для QuickForm
    /// </summary>
    public class QuickFormModel
    {
        //Пустое значение в списке
        public const string EmptyListItem = "... Выберите значение ...";

        //Данные уровня формы
        public string ControllerName { get; set; }
        public string ActionNameCreate { get; set; }
        public string ActionNameEdit { get; set; }
        public string ActionNameDelete { get; set; }

        //Заголовки форм в браузере
        public string TitleCreate { get; set; }
        public string TitleEdit { get; set; }
        public string TitleDelete { get; set; }

        /// <summary>
        /// Наименование данных для удаления
        /// </summary>
        public string DataTypeName_ForDelete { get; set; }

        /// <summary>
        /// Наименование данных для добавления
        /// </summary>
        public string DataTypeName_ForCreate { get; set; }

        /// <summary>
        /// Наименование данных для редактирования
        /// </summary>
        public string DataTypeName_ForEdit { get; set; }

        /// <summary>
        /// Наименование данных для списка
        /// </summary>
        public string DataTypeName_ForIndex { get; set; }
        

        //Текущие данные

        /// <summary>
        /// Параметры, которые дополнительно добавляются по кнопке отмены в форме
        /// </summary>
        public object CurrentResetFormRouteValue { get; set; }

        /// <summary>
        /// Тип действия
        /// </summary>
        public QuickFormActionType CurrentActionType { get; set; }

        /// <summary>
        /// Текущая модель формы
        /// </summary>
        public object CurrentModel { get; set; }

        /// <summary>
        /// Сообщение для удаления
        /// </summary>
        public string CurrentDeleteMessage { get; set; }

        /// <summary>
        /// Количество записей для списка в справочниках
        /// </summary>
        public int CurrentDTListDisplayLength { get; set; }

        /// <summary>
        /// Неглубокое копирование объекта
        /// </summary>
        public QuickFormModel Clone()
        {
            QuickFormModel Result = (QuickFormModel)this.MemberwiseClone();
            return Result;
        }

        /// <summary>
        /// Добавление текущих данных для для списка в справочниках
        /// </summary>
        public QuickFormModel forIndexClassifier(int DTListDisplayLength, object resetFormRouteValueParam = null)
        {
            QuickFormModel Result = this.Clone();

            Result.CurrentActionType = QuickFormActionType.Index;
            Result.CurrentDTListDisplayLength = DTListDisplayLength;
            Result.CurrentModel = null;
            Result.CurrentResetFormRouteValue = resetFormRouteValueParam;

            return Result;
        }

        /// <summary>
        /// Добавление текущих данных для метода добавления
        /// </summary>
        public QuickFormModel forCreate(object CurrentModelParam, object resetFormRouteValueParam = null)
        {
            QuickFormModel Result = this.Clone();

            Result.CurrentActionType = QuickFormActionType.Create;
            Result.CurrentModel = CurrentModelParam;
            Result.CurrentResetFormRouteValue = resetFormRouteValueParam;

            return Result;
        }

        /// <summary>
        /// Добавление текущих данных для метода редактирования
        /// </summary>
        public QuickFormModel forEdit(object CurrentModelParam, object resetFormRouteValueParam = null)
        {
            QuickFormModel Result = this.Clone();

            Result.CurrentActionType = QuickFormActionType.Edit;
            Result.CurrentModel = CurrentModelParam;
            Result.CurrentResetFormRouteValue = resetFormRouteValueParam;

            return Result;
        }

        /// <summary>
        /// Добавление текущих данных для метода удаления
        /// </summary>
        public QuickFormModel forDelete(object CurrentModelParam, string CurrentDeleteMessageParam, object resetFormRouteValueParam = null)
        {
            QuickFormModel Result = this.Clone();

            Result.CurrentActionType = QuickFormActionType.Delete;
            Result.CurrentModel = CurrentModelParam;
            Result.CurrentDeleteMessage = CurrentDeleteMessageParam;
            Result.CurrentResetFormRouteValue = resetFormRouteValueParam;
            
            return Result;
        }

        /// <summary>
        /// Наименование сессионной переменной для текущего значения номера в DataTable
        /// </summary>
        public static string DtVarIdName(string ControllerName)
        {
            string Result = ControllerName + "_dtid";
            return Result;
        }

        /// <summary>
        /// Наименование сессионной переменной для текущего объекта
        /// </summary>
        public string CurrentDtVarIdName
        {
            get
            {
                return DtVarIdName(this.ControllerName);
            }
        }

    }
}