using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;
using System.Web.Http.ModelBinding;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.Core;
using Kreta.Enums;
using Kreta.Resources;
using Kreta.Web.Helpers.Error;
using Kreta.Web.Models.EditorTemplates;
using Kreta.Web.Security;
using Newtonsoft.Json;

namespace Kreta.Web.Areas.Intezmeny.Models
{
    public class TeremModel : TabStripModel
    {
        public TeremModel()
        {
            TeremAlapadatokModel = new TeremAlapadatokModel();
            TeremBerbeadasModel = new TeremBerbeadasModel();
        }

        public int? TeremId { get; set; }

        public TeremAlapadatokModel TeremAlapadatokModel { get; set; }

        public TeremBerbeadasModel TeremBerbeadasModel { get; set; }

        public static TeremCO ConvertModelToCO(TeremModel teremModel)
        {
            var teremCo = new TeremCO()
            {
                Aktiv = teremModel.TeremAlapadatokModel.Aktiv,
                TeremId = teremModel.TeremId,
                Jelleg = teremModel.TeremAlapadatokModel.IsFromSzervezet ? (int)TeremTipusEnum.dualis_helyszin : teremModel.TeremAlapadatokModel.Jelleg,
                Kapacitas = teremModel.TeremAlapadatokModel.Kapacitas,
                MukodesiHelyID = teremModel.TeremAlapadatokModel.MukodesiHelyID,
                MukodesiHelyNev = teremModel.TeremAlapadatokModel.MukodesiHelyNev,
                Nev = teremModel.TeremAlapadatokModel.Nev,
                Terulet = teremModel.TeremAlapadatokModel.Terulet,
                TobbOratLehetTartani = teremModel.TeremAlapadatokModel.TobbOratLehetTartani,
                TeremFelelosID = teremModel.TeremAlapadatokModel.Teremfelelos,
                Vizsgakapacitas = teremModel.TeremAlapadatokModel.VizsgaKapacitas,
                WifiLefedett = teremModel.TeremAlapadatokModel.WifiLefedett,
                Megjegyzes = teremModel.TeremAlapadatokModel.Megjegyzes,
                IsInternetkapcsolatElerheto = teremModel.TeremAlapadatokModel.IsInternetkapcsolatElerheto,
                TanulokSzamaraHozzaferhInternetesgep = teremModel.TeremAlapadatokModel.TanulokSzamaraHozzaferhInternetesgep,
                PedagogusHozzaferhInternetesgep = teremModel.TeremAlapadatokModel.PedagogusHozzaferhInternetesgep,
                OktCelraHasznaltSzamitogepekSzama = teremModel.TeremAlapadatokModel.OktCelraHasznaltSzamitogepekSzama,
                IsInterakttablavalMunkaallomassalFelszerelt = teremModel.TeremAlapadatokModel.IsInterakttablavalMunkaallomassalFelszerelt,

                Berbeadhato = teremModel.TeremBerbeadasModel.Berbeadhato,
                Ar = teremModel.TeremBerbeadasModel.Ar,
                Leiras = teremModel.TeremBerbeadasModel.Leiras,
                FoglalhatoIdoszakKezdete = teremModel.TeremBerbeadasModel.FoglalhatoIdoszakKezdete,
                FoglalhatoIdoszakVege = teremModel.TeremBerbeadasModel.FoglalhatoIdoszakVege,
                TulajdonTipusaId = teremModel.TeremBerbeadasModel.TulajdonTipusaId,
                EmeltAr = teremModel.TeremBerbeadasModel.EmeltAr,
                EmeltIdoszakKezdete = teremModel.TeremBerbeadasModel.EmeltIdoszakKezdete,
                SzervezetId = teremModel.TeremAlapadatokModel.SzervezetId,
            };

            if (teremModel.TeremBerbeadasModel.TeremBerbeadasIdopontokListModel != null && teremModel.TeremBerbeadasModel.TeremBerbeadasIdopontokListModel.Count > 0)
            {
                teremCo.TeremBerbeadasIdopontokCOList = TeremBerbeadasIdopontokModel.ConvertModelToCO(teremModel.TeremBerbeadasModel.TeremBerbeadasIdopontokListModel);
            }

            return teremCo;
        }

        public static TeremModel ConvertCoToModel(TeremCO teremCO)
            => new TeremModel()
            {
                TeremId = teremCO.TeremId,
                TeremAlapadatokModel = new TeremAlapadatokModel
                {
                    Aktiv = teremCO.Aktiv,
                    Jelleg = teremCO.Jelleg,
                    Kapacitas = teremCO.Kapacitas,
                    MukodesiHelyID = teremCO.MukodesiHelyID,
                    MukodesiHelyNev = teremCO.MukodesiHelyNev,
                    Nev = teremCO.Nev,
                    Terulet = teremCO.Terulet,
                    TobbOratLehetTartani = teremCO.TobbOratLehetTartani,
                    Teremfelelos = teremCO.TeremFelelosID,
                    TeremfelelosNev = teremCO.TeremFelelos,
                    VizsgaKapacitas = teremCO.Vizsgakapacitas,
                    WifiLefedett = teremCO.WifiLefedett,
                    Megjegyzes = teremCO.Megjegyzes,
                    IsInternetkapcsolatElerheto = teremCO.IsInternetkapcsolatElerheto,
                    TanulokSzamaraHozzaferhInternetesgep = teremCO.TanulokSzamaraHozzaferhInternetesgep,
                    PedagogusHozzaferhInternetesgep = teremCO.PedagogusHozzaferhInternetesgep,
                    OktCelraHasznaltSzamitogepekSzama = teremCO.OktCelraHasznaltSzamitogepekSzama,
                    IsInterakttablavalMunkaallomassalFelszerelt = teremCO.IsInterakttablavalMunkaallomassalFelszerelt,
                    SzervezetId = teremCO.SzervezetId,
                },
                TeremBerbeadasModel = TeremBerbeadasModel.ConvertCoToModel(teremCO),
            };

        public static void ValidateModel(TeremModel teremModel, List<string> kapcsolodoOraTipusok, ModelStateDictionary modelState)
        {
            if (!teremModel.TeremAlapadatokModel.IsFromSzervezet)
            {
                TeremAlapadatokModel.ValidateModel(teremModel.TeremAlapadatokModel, modelState);
            }

            if (!teremModel.TeremAlapadatokModel.Aktiv && kapcsolodoOraTipusok.Any())
            {
                modelState.AddModelError("TeremAlapadatokModel.Aktiv", $"{ErrorResource.AzAlabbiKapcsolodasokMiattATeremInaktivvaTeteleNemLehetseges}{(string.Join(", ", kapcsolodoOraTipusok))}");
            }

            if (teremModel.TeremBerbeadasModel.Berbeadhato)
            {
                if (!teremModel.TeremAlapadatokModel.Terulet.HasValue)
                {
                    modelState.AddModelError("TeremAlapadatokModel.Terulet", ErrorResource.AlapteruletMegadasaKotelezoHaATeremBerbeadhato);
                }

                if (!ClaimData.IsSelectedTanev21_22OrLater || !ClaimData.IsSzakkepzoIntezmeny)
                {
                    if (!teremModel.TeremAlapadatokModel.Kapacitas.HasValue)
                    {
                        modelState.AddModelError("TeremAlapadatokModel.Kapacitas", ErrorResource.BefogadokepessegMegadasaKotelezoHaATeremBerbeadhatoas);
                    }
                }

                TeremBerbeadasModel.ValidateModel(teremModel.TeremBerbeadasModel, modelState);
            }

            if (ClaimData.IsSelectedTanev21_22OrLater && ClaimData.IsSzakkepzoIntezmeny)
            {
                if (teremModel.TeremAlapadatokModel.IsFromSzervezet)
                {
                    if (!teremModel.TeremAlapadatokModel.SzervezetId.IsEntityId())
                    {
                        modelState.AddModelError("TeremAlapadatokModel_SzervezetId", ErrorResource.SzervezetKivalasztasaKotelezo);
                    }
                }
            }

            if (!teremModel.TeremAlapadatokModel.IsFromSzervezet)
            {
                if (!teremModel.TeremAlapadatokModel.MukodesiHelyID.HasValue)
                {
                    modelState.AddModelError("TeremAlapadatokModel_MukodesiHelyID", IntezmenyResource.MukodesiHelyMegadasaKotelezo);
                }
            }
        }
    }

    public class TeremAlapadatokModel
    {
        public TeremAlapadatokModel()
        {
            Aktiv = true;
            TobbOratLehetTartani = false;
        }

        [Display(Name = nameof(IntezmenyResource.HelyisegNev), ResourceType = typeof(IntezmenyResource))]
        [Required(ErrorMessageResourceName = nameof(IntezmenyResource.HelyisegNevMegadasaKotelezo), ErrorMessageResourceType = typeof(IntezmenyResource))]
        [StringLength(maximumLength: 255, ErrorMessageResourceName = nameof(ErrorResource.Max255Karakter), ErrorMessageResourceType = typeof(ErrorResource))]
        public string Nev { get; set; }

        [KretaRequiredIf("IsFromSzervezet", false, ErrorMessageResourceName = nameof(IntezmenyResource.JellegMegadasaKotelezo), ErrorMessageResourceType = typeof(IntezmenyResource))]
        [Display(Name = nameof(IntezmenyResource.HelyisegJelleg), ResourceType = typeof(IntezmenyResource))]
        public int? Jelleg { get; set; }

        [Display(Name = nameof(IntezmenyResource.HelyisegJelleg), ResourceType = typeof(IntezmenyResource))]
        public string JellegNev { get { return Jelleg.HasValue ? Jelleg.Value.GetDisplayName<TeremTipusEnum>(ClaimData.SelectedTanevID.Value) : ""; } }

        [Display(Name = nameof(IntezmenyResource.Alapterulet_nm), ResourceType = typeof(IntezmenyResource))]
        [Range(1, 9999, ErrorMessageResourceName = nameof(IntezmenyResource.Alapterulet1Tol9999), ErrorMessageResourceType = typeof(IntezmenyResource))]
        public int? Terulet { get; set; }

        [Display(Name = nameof(IntezmenyResource.Befogadokepesseg), ResourceType = typeof(IntezmenyResource))]
        [Range(0, 5000, ErrorMessageResourceName = nameof(IntezmenyResource.BefogadoKepessegeg0tol5000), ErrorMessageResourceType = typeof(IntezmenyResource))]
        public int? Kapacitas { get; set; }

        [Display(Name = nameof(IntezmenyResource.VizsgaBefogadokepesseg), ResourceType = typeof(IntezmenyResource))]
        [Range(0, 5000, ErrorMessageResourceName = nameof(IntezmenyResource.VizsgaBefogadoKepesseg0Tol5000), ErrorMessageResourceType = typeof(IntezmenyResource))]
        public int? VizsgaKapacitas { get; set; }

        [Display(Name = nameof(IntezmenyResource.Aktiv), ResourceType = typeof(IntezmenyResource))]
        public bool Aktiv { get; set; }

        [Display(Name = nameof(IntezmenyResource.Aktiv), ResourceType = typeof(IntezmenyResource))]
        public string AktivSzoveg { get { return Aktiv ? CommonResource.Igen : CommonResource.Nem; } }

        [Display(Name = nameof(IntezmenyResource.MukodesiHely), ResourceType = typeof(IntezmenyResource))]
        public int? MukodesiHelyID { get; set; }

        [Display(Name = nameof(IntezmenyResource.MukodesiHely), ResourceType = typeof(IntezmenyResource))]
        public string MukodesiHelyNev { get; set; }

        [Display(Name = nameof(IntezmenyResource.Teremfelelos), ResourceType = typeof(IntezmenyResource))]
        public int? Teremfelelos { get; set; }

        [Display(Name = nameof(IntezmenyResource.Teremfelelos), ResourceType = typeof(IntezmenyResource))]
        public string TeremfelelosNev { get; set; }

        [Display(Name = nameof(IntezmenyResource.EgyszerreTobbOratLehetTartani), ResourceType = typeof(IntezmenyResource))]
        public bool TobbOratLehetTartani { get; set; }

        [Display(Name = nameof(IntezmenyResource.EgyszerreTobbOratLehetTartani), ResourceType = typeof(IntezmenyResource))]
        public string TobbOratLehetTartaniSzoveg { get { return TobbOratLehetTartani ? CommonResource.Igen : CommonResource.Nem; } }

        [Display(Name = nameof(IntezmenyResource.WifiElerheto), ResourceType = typeof(IntezmenyResource))]
        public bool WifiLefedett { get; set; }

        [Display(Name = nameof(IntezmenyResource.WifiElerheto), ResourceType = typeof(IntezmenyResource))]
        public string WifiLefedettSzoveg { get { return WifiLefedett ? CommonResource.Igen : CommonResource.Nem; } }

        [Display(Name = nameof(IntezmenyResource.IsInternetkapcsolatElerheto), ResourceType = typeof(IntezmenyResource))]
        public bool IsInternetkapcsolatElerheto { get; set; }

        [Display(Name = nameof(IntezmenyResource.IsInternetkapcsolatElerheto), ResourceType = typeof(IntezmenyResource))]
        public string IsInternetkapcsolatElerhetoSzoveg { get { return IsInternetkapcsolatElerheto ? CommonResource.Igen : CommonResource.Nem; } }

        [Display(Name = nameof(IntezmenyResource.TanulokSzamaraHozzaferhInternetesgep), ResourceType = typeof(IntezmenyResource))]
        public int? TanulokSzamaraHozzaferhInternetesgep { get; set; }

        [Display(Name = nameof(IntezmenyResource.PedagogusHozzaferhInternetesgep), ResourceType = typeof(IntezmenyResource))]
        public int? PedagogusHozzaferhInternetesgep { get; set; }

        [Display(Name = nameof(IntezmenyResource.OktCelraHasznaltSzamitogepekSzama), ResourceType = typeof(IntezmenyResource))]
        public int? OktCelraHasznaltSzamitogepekSzama { get; set; }

        [Display(Name = nameof(IntezmenyResource.IsInterakttablavalMunkaallomassalFelszerelt), ResourceType = typeof(IntezmenyResource))]
        public bool IsInterakttablavalMunkaallomassalFelszerelt { get; set; }

        [Display(Name = nameof(IntezmenyResource.IsInterakttablavalMunkaallomassalFelszerelt), ResourceType = typeof(IntezmenyResource))]
        public string IsInterakttablavalMunkaallomassalFelszereltSzoveg { get { return IsInterakttablavalMunkaallomassalFelszerelt ? CommonResource.Igen : CommonResource.Nem; } }

        [Display(Name = nameof(IntezmenyResource.Megjegyzes), ResourceType = typeof(IntezmenyResource))]
        [StringLength(maximumLength: 500, ErrorMessageResourceName = nameof(ErrorResource.Max500Karakter), ErrorMessageResourceType = typeof(ErrorResource))]
        public string Megjegyzes { get; set; }

        [Display(Name = nameof(SzervezetResource.Szervezet), ResourceType = typeof(SzervezetResource))]
        public int? SzervezetId { get; set; }
        public bool IsFromSzervezet { get; set; }


        public static void ValidateModel(TeremAlapadatokModel teremAlapadatokModel, ModelStateDictionary modelState)
        {
            if (ClaimData.IsSelectedTanev21_22OrLater && ClaimData.IsSzakkepzoIntezmeny)
            {
                if (!teremAlapadatokModel.Kapacitas.HasValue)
                {
                    modelState.AddModelError("TeremAlapadatokModel.Kapacitas", ErrorResource.BefogadokepessegMegadasaKotelezo);
                }

                if (teremAlapadatokModel.IsInternetkapcsolatElerheto)
                {
                    if (!teremAlapadatokModel.TanulokSzamaraHozzaferhInternetesgep.HasValue)
                    {
                        modelState.AddModelError("TeremAlapadatokModel.TanulokSzamaraHozzaferhInternetesgep", IntezmenyResource.TanulokSzamaraHozzaferhInternetesgepKotelezo);
                    }

                    if (!teremAlapadatokModel.PedagogusHozzaferhInternetesgep.HasValue)
                    {
                        modelState.AddModelError("TeremAlapadatokModel.PedagogusHozzaferhInternetesgep", IntezmenyResource.PedagogusHozzaferhInternetesgepKotelezo);
                    }
                }
            }
            else
            {
                if (teremAlapadatokModel.Kapacitas.HasValue && teremAlapadatokModel.Kapacitas < 1)
                {
                    throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.ATeremKapacitasaNemLehetKisebbMintEgy);
                }
            }

            if (teremAlapadatokModel.VizsgaKapacitas > teremAlapadatokModel.Kapacitas)
            {
                throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.AVizsgaBefogadokepessegNemLehetNagyobbMintABefogadokepesseg);
            }
        }
    }

    public class UploadedFile
    {
        public string ContentAsBase64EncodedString { get; set; }

        public string Name { get; set; }
    }

    public class TeremBerbeadasModel
    {
        [Display(Name = nameof(IntezmenyResource.Berbeadhato), ResourceType = typeof(IntezmenyResource))]
        public bool Berbeadhato { get; set; }

        [Display(Name = nameof(IntezmenyResource.Berbeadhato), ResourceType = typeof(IntezmenyResource))]
        public string BerbeadhatoSzoveg => Berbeadhato.GetDisplayName();

        [Display(Name = nameof(IntezmenyResource.Ar), ResourceType = typeof(IntezmenyResource))]
        public int? Ar { get; set; }

        [Display(Name = nameof(IntezmenyResource.Leiras), ResourceType = typeof(IntezmenyResource))]
        [MaxLength(2000, ErrorMessageResourceName = nameof(ErrorResource.ALeirasSzovegeNemLehet2000KarakternelHosszabb), ErrorMessageResourceType = typeof(ErrorResource))]
        public string Leiras { get; set; }

        public int? PictureId { get; set; }

        public List<UploadedFile> PictureList { get; set; }

        public int? DocumentId { get; set; }

        public List<UploadedFile> Document { get; set; }

        [Display(Name = nameof(IntezmenyResource.FoglalhatoIdoszakKezdete), ResourceType = typeof(IntezmenyResource))]
        public DateTime? FoglalhatoIdoszakKezdete { get; set; }

        [Display(Name = nameof(IntezmenyResource.FoglalhatoIdoszakKezdete), ResourceType = typeof(IntezmenyResource))]
        public string FoglalhatoIdoszakKezdete_Text => FoglalhatoIdoszakKezdete.HasValue ? SDAFormat.GetShortDateFormat(FoglalhatoIdoszakKezdete.Value) : "-";

        [Display(Name = nameof(IntezmenyResource.FoglalhatoIdoszakVege), ResourceType = typeof(IntezmenyResource))]
        public DateTime? FoglalhatoIdoszakVege { get; set; }

        [Display(Name = nameof(IntezmenyResource.FoglalhatoIdoszakVege), ResourceType = typeof(IntezmenyResource))]
        public string FoglalhatoIdoszakVege_Text => FoglalhatoIdoszakVege.HasValue ? SDAFormat.GetShortDateFormat(FoglalhatoIdoszakVege.Value) : "-";

        public List<TeremBerbeadasIdopontokModel> TeremBerbeadasIdopontokListModel { get; set; }

        [Display(Name = nameof(IntezmenyResource.TulajdonTipusa), ResourceType = typeof(IntezmenyResource))]
        public int? TulajdonTipusaId { get; set; }

        [Display(Name = nameof(IntezmenyResource.EmeltAr), ResourceType = typeof(IntezmenyResource))]
        public int? EmeltAr { get; set; }

        [Display(Name = nameof(IntezmenyResource.EmeltIdoszakKezdete), ResourceType = typeof(IntezmenyResource))]
        public DateTime? EmeltIdoszakKezdete { get; set; }

        [Display(Name = nameof(IntezmenyResource.EmeltIdoszakKezdete), ResourceType = typeof(IntezmenyResource))]
        public string EmeltIdoszakKezdete_Text => EmeltIdoszakKezdete.HasValue ? SDAFormat.GetShortTimeFormat(EmeltIdoszakKezdete.Value) : "-";

        public static void ValidateModel(TeremBerbeadasModel teremBerbeadasModel, ModelStateDictionary modelState)
        {
            if (!teremBerbeadasModel.Ar.HasValue)
            {
                modelState.AddModelError("ArError", ErrorResource.AzArMegadasaKotelezo);
            }
            else if (teremBerbeadasModel.Ar.Value <= 0)
            {
                modelState.AddModelError("ArNumberError", ErrorResource.ABerbeadasiListaarNagyobbKellLegyenMint0Ft);
            }

            if (!teremBerbeadasModel.TulajdonTipusaId.HasValue)
            {
                modelState.AddModelError("TulajdonTipusaIdError", ErrorResource.TulajdonTipusaKotelezo);
            }

            if (teremBerbeadasModel.EmeltIdoszakKezdete.HasValue)
            {
                if (!teremBerbeadasModel.EmeltAr.HasValue)
                {
                    modelState.AddModelError("EmeltArError", ErrorResource.AzEmeltArMegadasaKotelezo);
                }
                else if (teremBerbeadasModel.EmeltAr.Value <= 0)
                {
                    modelState.AddModelError("EmeltArNumberError", ErrorResource.ABerbeadasiEmeltArNagyobbKellLegyenMint0Ft);
                }
            }

            if (teremBerbeadasModel.EmeltAr.HasValue)
            {
                if (!teremBerbeadasModel.EmeltIdoszakKezdete.HasValue)
                {
                    modelState.AddModelError("EmeltIdoszakKezdeteError", ErrorResource.AzEmeltIdoszakKezdeteMegadasaKotelezo);
                }
            }

            if (string.IsNullOrWhiteSpace(teremBerbeadasModel.Leiras))
            {
                modelState.AddModelError("LeirasError", ErrorResource.LeirasMegadasaKotelezo);
            }

            if (!(teremBerbeadasModel.PictureList?.Count > 0) && !teremBerbeadasModel.PictureId.HasValue)
            {
                modelState.AddModelError("FotoError", ErrorResource.KepFeltolteseKotelezo);
            }

            if (!teremBerbeadasModel.FoglalhatoIdoszakKezdete.HasValue)
            {
                modelState.AddModelError("FoglalhatoIdoszakKezdeteNagyobbError", ErrorResource.AFoglalhatoIdoszakKezdetetKotelezoMegadni);
            }
            else
            {
                if (teremBerbeadasModel.FoglalhatoIdoszakKezdete.Value < new DateTime(2021, 1, 1))
                {
                    modelState.AddModelError("FoglalhatoIdoszakKezdeteError", ErrorResource.FoglalhatosagKezdeteNemLehetElobbMint20210101);
                }
            }

            if (teremBerbeadasModel.FoglalhatoIdoszakVege.HasValue)
            {
                if (teremBerbeadasModel.FoglalhatoIdoszakKezdete > teremBerbeadasModel.FoglalhatoIdoszakVege)
                {
                    modelState.AddModelError("FoglalhatoIdoszakKezdeteNagyobbError", ErrorResource.AFoglalhatoIdoszakKezdeteNemLehetNagyobbMintAVege);
                }

                if (teremBerbeadasModel.FoglalhatoIdoszakVege.Value < new DateTime(2021, 1, 1))
                {
                    modelState.AddModelError("FoglalhatoIdoszakVegeError", ErrorResource.FoglalhatosagVegeNemLehetElobbMint20210101);
                }
            }

            if (teremBerbeadasModel.TeremBerbeadasIdopontokListModel != null && teremBerbeadasModel.TeremBerbeadasIdopontokListModel.Count > 0)
            {
                TeremBerbeadasIdopontokModel.ValidateModel(teremBerbeadasModel.TeremBerbeadasIdopontokListModel, modelState);
            }
            else
            {
                modelState.AddModelError("LegalabbEgyIdointervallumotKotelezoValasztani", ErrorResource.LegalabbEgyIdointervallumotKotelezoValasztani);
            }
        }

        public static TeremBerbeadasModel ConvertCoToModel(TeremCO teremCO)
        {
            var teremBerbeadasModel = new TeremBerbeadasModel()
            {
                Berbeadhato = teremCO.Berbeadhato,
                Ar = teremCO.Ar,
                Leiras = teremCO.Leiras,
                FoglalhatoIdoszakKezdete = teremCO.FoglalhatoIdoszakKezdete,
                FoglalhatoIdoszakVege = teremCO.FoglalhatoIdoszakVege,
                DocumentId = teremCO.DokumentumId,
                PictureId = teremCO.KepId,
                TulajdonTipusaId = teremCO.TulajdonTipusaId.HasValue ? teremCO.TulajdonTipusaId : (int)TulajdonTipusEnum.allami_tulajdonban_levo_ingatlan,
                EmeltAr = teremCO.EmeltAr,
                EmeltIdoszakKezdete = teremCO.EmeltIdoszakKezdete
            };

            return teremBerbeadasModel;
        }
    }

    public class TeremBerbeadasIdopontokModel
    {
        public int HetNapjaId { get; set; }

        public int? TeremElerhetosegId { get; set; }

        public string Kezdete { get; set; }

        public string Vege { get; set; }

        public static void ValidateModel(List<TeremBerbeadasIdopontokModel> teremBerbeadasIdopontokModelList, ModelStateDictionary modelState)
        {
            foreach (var item in teremBerbeadasIdopontokModelList)
            {
                var regex = new Regex(Core.Constants.RegularExpressions.TimePicker);

                if (string.IsNullOrWhiteSpace(item.Kezdete) || string.IsNullOrWhiteSpace(item.Vege) || !regex.IsMatch(item.Kezdete) || !regex.IsMatch(item.Vege))
                {
                    modelState.AddModelError("TeremBerbeadasIdopontokFormatKotelezoError", ErrorResource.HibasFormatumAzOrakKezdetetEsVegetOoppAlakbanKellMegadni);
                    break;
                }

                string[] oraPerc = item.Kezdete.Split(':');
                var kezdete = DateTime.Today.AddHours(Convert.ToInt32(oraPerc[0])).AddMinutes(Convert.ToInt32(oraPerc[1]));

                oraPerc = item.Vege.Split(':');
                var vege = DateTime.Today.AddHours(Convert.ToInt32(oraPerc[0])).AddMinutes(Convert.ToInt32(oraPerc[1]));

                if (kezdete > vege)
                {
                    modelState.AddModelError("TeremBerbeadasIdopontokKesobbError", ErrorResource.ATeremBerbeadasIdopontjainakKezdeteNemLehetKesobbMintAVege);
                    break;
                }
            }
        }

        public static List<TeremBerbeadasIdopontokCO> ConvertModelToCO(List<TeremBerbeadasIdopontokModel> teremBerbeadasIdopontokModels)
        {
            var teremBerbeadasIdopontokCOList = new List<TeremBerbeadasIdopontokCO>();

            teremBerbeadasIdopontokModels.ForEach(item =>
            {
                var teremBerbeadasIdopontokCO = new TeremBerbeadasIdopontokCO
                {
                    TeremElerhetosegId = item.TeremElerhetosegId,
                    HetNapjaId = item.HetNapjaId
                };

                string[] oraPerc = item.Kezdete.Split(':');
                teremBerbeadasIdopontokCO.Kezdete = DateTime.Today.AddHours(Convert.ToInt32(oraPerc[0])).AddMinutes(Convert.ToInt32(oraPerc[1]));

                oraPerc = item.Vege.Split(':');
                teremBerbeadasIdopontokCO.Vege = DateTime.Today.AddHours(Convert.ToInt32(oraPerc[0])).AddMinutes(Convert.ToInt32(oraPerc[1]));

                teremBerbeadasIdopontokCOList.Add(teremBerbeadasIdopontokCO);
            });

            return teremBerbeadasIdopontokCOList;
        }
    }
}