using System.Collections.Generic;
namespace Vrh.iScheduler.Report
{
    /// <summary>
    /// iSchedulerReport-ban alkalmazható változók osztálya.
    /// </summary>
    public class ScheduleReportVariables : Dictionary<string,string>
    {
        #region Constants

        /// <summary>
        /// Az ebben az osztályban szereplő változók bal oldali (kezdő) szeparátora (bal és jobb között fogja keresni).
        /// </summary>
        public const string LEFT_SEPARATOR= "@";

        /// <summary>
        /// Az ebben az osztályban szereplő változók jobb oldali (lezáró) szeparátora (bal és jobb között fogja keresni).
        /// </summary>
        public const string RIGHT_SEPARATOR = "@";

        /// <summary>
        /// A végrehajtandó riport csomaghoz hozzárendelendő szerep létrehozásakor az „Új szerep létrehozása” ablak
        /// adatbeviteli mezőjében megadott érték. (CreateRoleUrl-ben használható az Editor-ban.)
        /// A végrehajtandó riport csomaghoz hozzárendelt szerep neve. (PackageExecute-nál)
        /// </summary>
        public const string ROLENAME = "ROLENAME";

        /// <summary>
        /// A megadott szerepköröket tartalmazó lista változója.
        /// Az AssignRoleToRolegroupsUrl-ben használható az Editor-ban.
        /// </summary>
        public const string ROLEGROUPLIST = "ROLEGROUPLIST";

        /// <summary>
        /// A megadott felhasználókat tartalmazó lista változója.
        /// Az AssignRoleToUsersUrl-ben használható az Editor-ban.
        /// </summary>
        public const string USERLIST = "USERLIST";

        /// <summary>
        /// A végrehajtandó report nyelvi beállítása! Adatbázisból!
        /// </summary>
        public const string LCID = "LCID";

        /// <summary>
        /// Az Execute akciónak paraméterben átadott időbélyeg dátum része YYYYMMDD formában.
        /// </summary>
        public const string DATESTAMP = "DATESTAMP";

        /// <summary>
        /// Az Execute akciónak paraméterben átadott időbélyeg dátum része HHmmss formában.
        /// </summary>
        public const string TIMESTAMP ="TIMESTAMP";

        /// <summary>
        /// Az Execute akciónak paraméterben átadott riport csomag azonosító.
        /// </summary>
        public const string PCKNAME ="PCKNAME";

        /// <summary>
        /// A legenerált riport file-ok teljes elérési útjának vesszővel tagolt listája
        /// (SendMessageUrl használhatja)
        /// </summary>
        public const string FILEPATHLIST = "FILEPATHLIST";

        /// <summary>
        /// A végrehajtandó riport neve. (RunReportUrl használhatja)
        /// </summary>
        public const string REPORTNAME="REPORTNAME";

        /// <summary>
        /// A végrehajtandó riport formátuma. (RunReportUrl használhatja).
        /// </summary>
        public const string REPORTFORMAT ="REPORTFORMAT";

        /// <summary>
        /// A riport csomagra jogosult felhasználók e-mail címeinek listája.
        /// (SendMessageUrl használhatja)
        /// </summary>
        public const string SENDTOEMAILLIST ="SENDTOEMAILLIST";

        /// <summary>
        /// A végrehajtandó riport letárolási helye, célmappa.
        /// (RunReportUrl használhatja)
        /// </summary>
        public const string REPORTFILEPATH = "REPORTFILEPATH";

        /// <summary>
        /// A riportnak átadandó paraméter összeállítás neve.
        /// (RunReportUrl használhatja)
        /// </summary>
        public const string PARPRESET = "PARPRESET";

        /// <summary>
        /// Az épp elmentett csomag azonosítója.
        /// (TestExecuteUrl használhatja)
        /// </summary>
        public const string OBJECTID ="OBJECTID";

        /// <summary>
        /// Az épp elmentett csomag csoportja.
        /// (TestExecuteUrl használhatja)
        /// </summary>
        public const string GROUPID = "GROUPID";

        /// <summary>
        /// A teszt futtatás időpontja.
        /// (TestExecuteUrl használhatja)
        /// </summary>
        public const string NOW = "NOW";

        /// <summary>
        /// Az az XmlParser kapcsolati sztring, amely alapján az editor működik.
        /// (TestExecuteUrl használhatja)
        /// </summary>
        public const string THISXMLCS = "THISXMLCS";

        #endregion Constants

        #region Properties
        #endregion Properties

        #region Constructor
        #endregion Constructor

        #region Public methods

        /// <summary>
        /// Az osztály változóinak behelyettesítése.
        /// </summary>
        /// <param name="data">Az adat, amelyben meg kell vizsgálni van-e helyettesítendő változó.</param>
        /// <returns>A behelyettesítés utáni string.</returns>
        public string Substitution(string data)
        {
            if (string.IsNullOrWhiteSpace(data)) return data;

            string result = data;
            foreach (KeyValuePair<string,string> ppair in this)
            {
                result = result.Replace(string.Concat(LEFT_SEPARATOR, ppair.Key, RIGHT_SEPARATOR), ppair.Value);
            }
            return result;
        }

        #endregion Public methods
    }
}
