using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Vrh.iScheduler
{
    /// <summary>
    /// Az iScheduler modulban használatos névtéren belül elérhető állandói.
    /// </summary>
    public static class SchConst
    {
        /// <summary>
        /// A modul area neve.
        /// </summary>
        public const string AREA = "iScheduler";

        /// <summary>
        /// A modulban az ütemezés szerkesztéséhez szükséges sciptek bundles neve.
        /// </summary>
        public const string BUNDLES_SCRIPT_FOR_EDITOR = "~/SchedulerEditor/scripts";

        /// <summary>
        /// A modulban az ütemezések menedzselésére érvényes sciptek bundles neve.
        /// </summary>
        public const string BUNDLES_SCRIPT_FOR_MANAGER = "~/SchedulerManager/scripts";

        /// <summary>
        /// A modulban az ütemezések menedzselésére érvényes sciptek bundles neve a nptár nézetben.
        /// </summary>
        public const string BUNDLES_SCRIPT_FOR_MANAGERCALENDAR = "~/SchedulerManagerCalendar/scripts";

        /// <summary>
        /// A modulban az ütemezések szerkesztésekor használt stílusok bundles neve.
        /// </summary>
        public const string BUNDLES_STYLE_FOR_EDITOR = "~/SchedulerEditor/content";

        /// <summary>
        /// A modulban a listás ütemezés-menedzselésére érvényes stílusok bundles neve.
        /// </summary>
        public const string BUNDLES_STYLE_FOR_MANAGER = "~/SchedulerManager/content";

        /// <summary>
        /// A modulban a naptáras ütmezés-menedzselésére érvényes stílusok bundles neve.
        /// </summary>
        public const string BUNDLES_STYLE_FOR_MANAGERCALENDAR = "~/SchedulerManagerCalendar/content";

        /// <summary>
        /// A modulban használatos controller neve.
        /// </summary>
        public const string CTRL = AREA;

        /// <summary>
        /// Alapértelmezett SQL kapcsolati sztring neve
        /// </summary>
        public const string DEFAULT_SQLCONNECTIONSTRINGNAME = MODULNAME + ":connectionString";

        /// <summary>
        /// Az alapértelmezett konfiguráció megnevezése az XmlParser Configurations elemben.
        /// </summary>
        public const string DEFAULT_XMLCONFIGNAME = "iScheduler";

        /// <summary>
        /// Az alapértelmezett konfiguráció megnevezése az XmlParser Configurations elemben.
        /// </summary>
        public const string FORMAT_OPERTIONATIME = "iScheduler";

        /// <summary>
        /// appSettings modulnév.
        /// </summary>
        public const string MODULNAME = "VRH." + AREA;

        #region Actions for the action names of controller
        /// <summary>
        /// Au iSchedulerController akcióinak megnevezése.
        /// </summary>
        public static class Actions
        {
            /// <summary>
            /// CheckObjects akció neve.
            /// </summary>
            public const string CHECKOBJECTS = "CheckObjects";

            /// <summary>
            /// CheckSchedule akció neve.
            /// </summary>
            public const string CHECKSCHEDULE = "CheckSchedule";

            /// <summary>
            /// ConsistencyCheck akció neve.
            /// </summary>
            public const string CONSISTENCYCHECK = "ConsistencyCheck";

            /// <summary>
            /// Editor akció neve.
            /// </summary>
            public const string EDITOR = "Editor";

            /// <summary>
            /// ListObjects akció neve.
            /// </summary>
            public const string LISTOBJECTS = "ListObjects";

            /// <summary>
            /// ListOperations akció neve.
            /// </summary>
            public const string LISTOPERATIONS = "ListOperations";

            /// <summary>
            /// Manager akció neve.
            /// </summary>
            public const string MANAGER = "Manager";
        }
        #endregion Actions for the action names of controller

        #region Groups static class
        /// <summary>
        /// Speciális csoport azonosítók állandói.
        /// </summary>
        public static class Groups
        {
            /// <summary>
            /// Annak jelölése, hogy a Manager-ben az összes csoporthoz tartozót látni akarja.
            /// </summary>
            public const string All = "*";
        }
        #endregion Groups static class

        #region Ids for the inputs and others of the html
        /// <summary>
        /// A HTML-ben használt inputok vagy egyéb eszközök azonosítói.
        /// </summary>
        public static class Ids
        {
            /// <summary>
            /// A Manager.cshtml-ben a DataTable táblázat azonosítója.
            /// </summary>
            public const string TABLE = "grid-ischeduler";

            /// <summary>
            /// Az editor.cshtml-ben a Form azonosítója.
            /// </summary>
            public const string EDITOR_FORM = "from-ischeduler";

            /// <summary>
            /// A Manager felületen az állapot szűrés select inputjának azonosítója.
            /// </summary>
            public const string INPUT_FILTER = "inputfilter-state"; 
        }
        #endregion Ids for the inputs and others of the html

        #region Params class for action parameters
        /// <summary>
        /// A modulban alkalmazott nézetek megnevezései.
        /// </summary>
        public static class Params
        {
            /// <summary>
            /// Az ablakba kért akció ablakéazonosíját tartalmazó paraméter neve.
            /// </summary>
            public const string BOOTBOXID = "bootboxid";

            /// <summary>
            /// Megjelenítési mód paraméter neve.
            /// Értékei: "list", vagy "calendar"
            /// </summary>
            public const string CALLINGVIEWMODE = "callingviewmode";

            /// <summary>
            /// SQL kapcsolati sztringet tartalmazó paraméter neve.
            /// Akció: ConsistencyCheck
            /// </summary>
            public const string CONNECTIONSTRING = "connectionString";

            /// <summary>
            /// Megjelenítési mód, értékei "list", vagy "calendar".
            /// Akció: Manager
            /// </summary>
            public const string DISPLAY = "display";

            /// <summary>
            /// Ütemezés csoport azonosítóját taralmazó paraméter neve.
            /// Akció: ConsistencyCheck, Editor, Manager
            /// </summary>
            public const string GROUPID = "groupid";

            /// <summary>
            /// Az ütemezés rekord azonosítóját tartalmazó paraméter neve.
            /// </summary>
            public const string ID = "id";

            /// <summary>
            /// Ütemezett objektum azonosító listát tartalmazó paraméter neve
            /// Opcionális paraméter.
            /// </summary>
            public const string OBJECTIDLIST = "objectidlist";

            /// <summary>
            /// Ütemezett objektum típusát tartalmazó paraméter neve
            /// Akció: ConsistencyCheck
            /// </summary>
            public const string OBJECTTYPE = "objectType";

            /// <summary>
            /// XmlParser kapcsolati sztringet tartalmazó paraméter neve.
            /// Akció: CheckSchedule, Editor, Manager
            /// </summary>
            public const string XML = "xml";
        }
        #endregion Params class for action parameters

        #region ScheduleTypes static class
        /// <summary>
        /// Időzítés típusai. (Egyedi, Heti, Havi)
        /// </summary>
        public static class ScheduleTypes
        {
            /// <summary>
            /// Egyedi időzítést jelölése.
            /// </summary>
            public const string Single = "SE";

            /// <summary>
            /// Heti időzítést jelölése.
            /// </summary>
            public const string Weekly = "WY";

            /// <summary>
            /// Havi időzítés jelölése.
            /// </summary>
            public const string Monthly = "MY";
        }
        #endregion ScheduleTypes static class

        #region Variables of the iScheduler
        /// <summary>
        /// Az időzített objektum akcióiban használható változók nevei.
        /// </summary>
        public static class UrlVars
        {
            /// <summary>
            /// Az XML-ben magadott vagy a paraméterben megadott érték.
            /// </summary>
            public const string GROUPID = "GROUPID";

            /// <summary>
            /// SchedulerExecute akciónál, melyik ütemezést kell végrehajtani.
            /// </summary>
            public const string ID = "ID";

            /// <summary>
            /// Az ütemezndő objektum szerkesztő felültéhez (ObjectEditor) és
            /// az objektum végrehajtásához (Execute).
            /// </summary>
            public const string OBJECTID = "OBJECTID";

            /// <summary>
            /// Ütemezendő objektum Check akciójának meghívásakor használható.
            /// Az ellenőrzendő objektum listája kerül bele.
            /// </summary>
            public const string OBJECTLIST = "OBJECTLIST";

            /// <summary>
            /// Az XML-ben megadott ObjectType
            /// </summary>
            public const string OBJECTTYPE = "OBJECTTYPE";

            /// <summary>
            /// Execute akciónál maga az elvégzendő művelet neve kerül bele.
            /// </summary>
            public const string OPERATION = "OPERATION";

            /// <summary>
            /// Execute akciónál az ütemezett objektumnál szereplő OperationTime mező értéke kerül bele.
            /// </summary>
            public const string TIMESTAMP = "TIMESTAMP";

            /// <summary>
            /// Az iScheduler XML fájlát megímző Xmlparser kapcsoalti sztring kerül bele.
            /// </summary>
            public const string XMLCS = "XMLCS";

            /// <summary>
            /// Az időzített objektum akciók változóinak listáját adja vissza.
            /// </summary>
            /// <returns>Egy string típusú lista a változók neveivel.</returns>
            public static Dictionary<string, string> Dict()
            {
                return new Dictionary<string, string>
                {
                    { GROUPID, "" }, { ID, "" }, { OBJECTID, "" }, { OBJECTLIST, "" },
                    { OBJECTTYPE, "" }, { OPERATION, "" }, { TIMESTAMP, "" }, { XMLCS, "" }
                };
            }
        }
        #endregion Variables of the iScheduler

        #region Views class for view names
        /// <summary>
        /// A modulban alkalmazott nézetek megnevezései.
        /// </summary>
        public static class Views
        {
            /// <summary>
            /// Az ütemezés szerkesztő felület nézet neve.
            /// </summary>
            public const string EDITOR = "Editor";

            /// <summary>
            /// A hibákat megjelenítő nézet neve.
            /// </summary>
            public const string ERRORLIST = "ErrorList";

            /// <summary>
            /// Az ütemezések táblázatát megjelenítő nézet.
            /// "List" display mód esetén.
            /// </summary>
            public const string MANAGER = "Manager";

            /// <summary>
            /// Az ütemezéseket egy naptárban megjelenítő nézet.
            /// "Calendar" display mód esetén.
            /// </summary>
            public const string MANAGERCALENDAR = "ManagerCalendar";
        }
        #endregion Views class for view names
    }
}
