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

using VRH.Log4Pro.MultiLanguageManager;
using Vrh.Web.Common.Lib;
using Vrh.iScheduler.Report;

namespace Vrh.Web.iScheduler.Report
{
    /// <summary>
    /// Riport csomag szerkesztéshez használt modell.
    /// </summary>
    public class PackageEditorModel : CommonModel
    {
        #region Properties

        #region Adatbázis kezeléshez szükséges tulajdonságok

        /// <summary>
        /// Csomag egyedi adatbázis azonosítója.
        /// Ha 0, akkor felvitel.
        /// </summary>
        public int PackageId { get; set; } = 0;

        /// <summary>
        /// Csomag neve, amely ObjectId-ként szerepel az ütemező felé.
        /// </summary>
        [DisplayNameWithTrueWordCodes(typeof(SRWordCodes.iSchedulerReport.Editor.Labels.PackageName))]
        [RequiredWithTrueWordCodes(typeof(GeneralWordCodes.MLM.General.Messages.RequiredWithName))]
        [StringLengthWithTrueWordCodes(100, typeof(GeneralWordCodes.MLM.General.Messages.StringLengthWithName))]
        public string PackageName { get; set; }

        /// <summary>
        /// Csomag hosszabb leírása. Ha üresen marad, akkor belekerül a csomag neve.
        /// </summary>
        [DisplayNameWithTrueWordCodes(typeof(SRWordCodes.iSchedulerReport.Editor.Labels.PackageDescription))]
        [RequiredWithTrueWordCodes(typeof(GeneralWordCodes.MLM.General.Messages.RequiredWithName))]
        [StringLengthWithTrueWordCodes(200, typeof(GeneralWordCodes.MLM.General.Messages.StringLengthWithName))]
        public string PackageDescription { get; set; }

        /// <summary>
        /// Csomag használatához szükséges szerep neve.
        /// Csak olvasható, a program rakja össze.
        /// </summary>
        [DisplayNameWithTrueWordCodes(typeof(SRWordCodes.iSchedulerReport.Editor.Labels.PackageRoleName))]
        [RequiredWithTrueWordCodes(typeof(GeneralWordCodes.MLM.General.Messages.RequiredWithName))]
        public string PackageRoleName { get; set; }

        /// <summary>
        /// Használható-e a csomag, vagy sem.
        /// </summary>
        [DisplayNameWithTrueWordCodes(typeof(SRWordCodes.iSchedulerReport.Editor.Labels.PackageIsActive))]
        public bool PackageIsActive { get; set; } = false;

        /// <summary>
        /// Csomag melyik csoport azonosítóhoz tartozik.
        /// Ha a paraméterben * érkezik, akkor szerkeszthető állapotú.
        /// A felületen ezt az üres érték jelzi, ha üres a cshtml nyitásakor, akkor szerkeszthető.
        /// </summary>
        [DisplayNameWithTrueWordCodes(typeof(SRWordCodes.iSchedulerReport.Editor.Labels.PackageGroup))]
        [RequiredWithTrueWordCodes(typeof(GeneralWordCodes.MLM.General.Messages.RequiredWithName))]
        [StringLengthWithTrueWordCodes(100,typeof(GeneralWordCodes.MLM.General.Messages.StringLengthWithName))]
        public string PackageGroupId { get; set; }


        /// <summary>
        /// A csomag mentésekor, mely szerepkörökhöz tartozó felhasználókat kell hozzáadni
        /// a csomag nevéből képzett szerephez.
        /// </summary>
        [DisplayNameWithTrueWordCodes(typeof(SRWordCodes.iSchedulerReport.Editor.Labels.Rolegroups))]
        public string PackageRolegroupsSelected { get; set; }   //autocomplete "Selected" listid
        /// <summary>
        /// Autocomplete target
        /// </summary>
        public string PackageRolegroups { get; set; }           //autocomplete targetid

        
        /// <summary>
        /// A csomag mentésekor, mely felhasználókat kell hozzárendelni
        /// a csomag nevéből képzett szerephez.
        /// </summary>
        [DisplayNameWithTrueWordCodes(typeof(SRWordCodes.iSchedulerReport.Editor.Labels.Users))]
        public string PackageUsersSelected { get; set; }    //autocomplete "Selected" listid
        /// <summary>
        /// Autocomplete target
        /// </summary>
        public string PackageUsers { get; set; }            //autocomplete targetid

        
        /// <summary>
        /// Kiválasztott riportok azonosítóinak listája.
        /// </summary>
        public List<string> SelectedReports { get; set; }
        
        /// <summary>
        /// A riportokhoz kiválasztott formátumok listája.
        /// </summary>
        public List<string> SelectedFormats { get; set; }

        #endregion Adatbázis mezőit leíró tulajdonságok

        #region Rejtett inputként utazó tulajdonságok (POST-ban szükséges használni.)
        /// <summary>
        /// Az Editor meghívása honnan történt. 
        /// Egyelőre egy nevesített hely van: Vrh.iScheduler.Report.ManagerViewModel.CallSources.Manager, azaz 'manager'.
        /// </summary>
        public string SourceOfCalling { get; set; }

        /// <summary>
        /// Adatbázishoz kapcsolódás stringje, majd a POST-ban szükség van rá.
        /// </summary>
        public string ConnectionString { get; set; }

        /// <summary>
        /// Az XML-ből érkező érték, mely alapján a RoleName létrehozható.
        /// </summary>
        public string RoleNameMask { get; set; }

        /// <summary>
        /// Szerepkörök listájának lekéréséhez
        /// </summary>
        public string RolegroupListUrl { get; set; }

        /// <summary>
        /// Felhasználók listáját visszaadó URL.
        /// </summary>
        public string UserListUrl { get; set; }

        /// <summary>
        /// ??????????????????
        /// </summary>
        public string UsersOfRoleUrl { get; set; }

        /// <summary>
        /// Szerepet létrehozó URL.
        /// </summary>
        public string CreateRoleUrl { get; set; }

        /// <summary>
        /// Szerepet törlő URL.
        /// </summary>
        public string DeleteRoleUrl { get; set; }

        /// <summary>
        /// Szerep és szerepkör összerendelés.
        /// </summary>
        public string AssignRoleToRolegroupsUrl { get; set; }

        /// <summary>
        /// Szerep és felhasználó összerendelés
        /// </summary>
        public string AssignRoleToUsersUrl { get; set; }

        /// <summary>
        /// OneReport-tól ezzel az url-lel lehet elkérni a riportok listáját.
        /// Meg kell őrizni, mert szerkesztés közben a GetNewPackageReportItem-nek kell.
        /// </summary>
        public string ReportListUrl { get; set; }

        /// <summary>
        /// OneReport-tól ezzel az url-lel lehet elkérni a formátumok listáját.
        /// Meg kell őrizni, mert szerkesztés közben a GetNewPackageReportItem-nek kell.
        /// </summary>
        public string ReportFormatListUrl { get; set; }

        /// <summary>
        /// ??????????????????
        /// </summary>
        public string ReportParameterPresetListUrl { get; set; }

        /// <summary>
        /// Paraméterek előre beállított alapértelmezett érkeinek szerkesztését eredményező URL.
        /// </summary>
        public string ReportParameterPresetEditorUrl { get; set; }

        /// <summary>
        /// Az iSchedulerReport teszt futtatásához szükséges URL.
        /// </summary>
        public string TestExecuteOperation { get; set; }

        /// <summary>
        /// XmlParser kapcsolati sztring.
        /// </summary>
        public string XmlCs { get; set; }

        #endregion Rejtett inputként utazó tulajdonságok

        /// <summary>
        /// Annak jelzése, hogy a sikeres mentés után történjen-e teszt futtatás.
        /// A TestExecuteUrl elemben meghatározott Url meghívása.
        /// </summary>
        [DisplayNameWithTrueWordCodes(typeof(SRWordCodes.iSchedulerReport.Editor.Labels.TestExecute))]
        public bool IsTestExecute { get; set; } = false;

        #endregion Properties
    }
}
