using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Foolproof;
using Kreta.BusinessLogic.Classes;
using Kreta.Resources;

namespace Kreta.Web.Areas.Orarend.Models
{
    public class FogadooraModel
    {
        public FogadooraModel()
        {
            SelectedOsztalyCsoportIdList = new List<int>();
            ModifiedOsztalyCsoportList = new Dictionary<int, bool>();
            FogadooraDatumList = new List<DateTime>();
        }

        public int? Id { get; set; }

        public List<int> SelectedOsztalyCsoportIdList { get; set; }
        public Dictionary<int, bool> ModifiedOsztalyCsoportList { get; set; }
        public List<DateTime> FogadooraDatumList { get; set; }

        public DateTime FogadoOraDatuma { get; set; }   //Fogadó óra napját ebből szedjük ki (hidden field lesz)
        public int? NemKotottMunkaidoId { get; set; }

        [Display(Name = nameof(FogadooraResource.FogadooraKezdete), ResourceType = typeof(FogadooraResource))]
        [Required(ErrorMessageResourceName = nameof(FogadooraResource.FogadooraKezdeteMegadasaKotelezo), ErrorMessageResourceType = typeof(FogadooraResource))]
        public DateTime FogadoOraKezdete { get; set; }  //Óra-percet ebből szedjük ki
        [Display(Name = nameof(FogadooraResource.FogadooraVege), ResourceType = typeof(FogadooraResource))]
        [Required(ErrorMessageResourceName = nameof(FogadooraResource.FogadooraVegeMegadasaKotelezo), ErrorMessageResourceType = typeof(FogadooraResource))]
        public DateTime FogadoOraVege { get; set; } //Óra-percet ebből szedjük ki
        [Required(ErrorMessageResourceName = nameof(FogadooraResource.NincsBeallitvaTeremAFogadoorahoz), ErrorMessageResourceType = typeof(FogadooraResource))]
        [Display(Name = nameof(FogadooraResource.Terem), ResourceType = typeof(FogadooraResource))]
        public int? TeremId { get; set; }
        [Display(Name = nameof(FogadooraResource.Terem), ResourceType = typeof(FogadooraResource))]
        public string TeremNev { get; set; }
        [Display(Name = nameof(FogadooraResource.Rendszeresseg), ResourceType = typeof(FogadooraResource))]
        public int Rendszeresseg { get; set; }  //Enum
        [Display(Name = nameof(FogadooraResource.Rendszeresseg), ResourceType = typeof(FogadooraResource))]
        public string RendszeressegText { get; set; }  //Enum
        [Display(Name = nameof(FogadooraResource.NemKotottMunkaido), ResourceType = typeof(FogadooraResource))]
        public bool IsNemKotottMunkaido { get; set; }
        [Display(Name = nameof(FogadooraResource.JelentkezesekKezelese), ResourceType = typeof(FogadooraResource))]
        public bool JelentkezesekKezelese { get; set; }
        [Display(Name = nameof(FogadooraResource.EgysegnyiIdopontokPerc), ResourceType = typeof(FogadooraResource))]
        public int EgysegnyiIdopontok { get; set; }
        [Display(Name = nameof(FogadooraResource.FogadooraIdosavokraOsztasa), ResourceType = typeof(FogadooraResource))]
        public bool? IsIdosavraOsztas { get; set; }
        [Display(Name = nameof(FogadooraResource.ElsoAlkalomDatuma), ResourceType = typeof(FogadooraResource))]
        public DateTime? RendszeresFogadooraElsoDatuma { get; set; }
        [Display(Name = nameof(FogadooraResource.UtolsoAlkalomDatuma), ResourceType = typeof(FogadooraResource))]
        public DateTime? RendszeresFogadooraUtolsoDatuma { get; set; }
        public bool IsEgyAlkalomModosul { get; set; }
        [Display(Name = nameof(FogadooraResource.JelenjenMegFaliujsagon), ResourceType = typeof(FogadooraResource))]
        public bool IsFaliujsagonMegjelenjen { get; set; }

        [RequiredIf(nameof(IsFaliujsagonMegjelenjen), true, ErrorMessageResourceName = nameof(FogadooraResource.FaliujsagErvenyessegKezdeteKotelezo), ErrorMessageResourceType = typeof(FogadooraResource))]
        [DateRange(ErrorMessageResourceName = nameof(FogadooraResource.FaliujsagErvenyessegKezdeteNemErvenyes), ErrorMessageResourceType = typeof(FogadooraResource))]
        [Display(Name = nameof(FogadooraResource.FaliujsagErvenyessegKezdete), ResourceType = typeof(FogadooraResource))]
        public DateTime? FaliujsagErvenyessegKezdete { get; set; }

        [RequiredIf(nameof(IsFaliujsagonMegjelenjen), true, ErrorMessageResourceName = nameof(FogadooraResource.FaliujsagErvenyessegVegeKotelezo), ErrorMessageResourceType = typeof(FogadooraResource))]
        [DateRange(ErrorMessageResourceName = nameof(FogadooraResource.FaliujsagErvenyessegVegeNemErvenyes), ErrorMessageResourceType = typeof(FogadooraResource))]
        [Display(Name = nameof(FogadooraResource.FaliujsagErvenyessegVege), ResourceType = typeof(FogadooraResource))]
        public DateTime? FaliujsagErvenyessegVege { get; set; }

        public int ModositasiIdoszakTipus { get; set; }
        public string JSHelperNev { get; set; }
        public bool IsCalendar { get; set; }
        public bool IsRendszeressegModosithato { get; set; }
        public bool VanGvJelentkezes { get; set; }

        [Display(Name = nameof(FogadooraResource.KerjukValasszaKiAFogadooraIdopontjait), ResourceType = typeof(FogadooraResource))]
        public DateTime? FogadooraEgyebGyakorisagDefaultDate { get; set; }
        public DateTime TanevUtolsoNapja { get; set; }

        [Display(Name = nameof(FogadooraResource.JelentkezesHatarideje), ResourceType = typeof(FogadooraResource))]
        public int? JelentkezesHatarideje { get; set; } = 0;
        public bool IsNemKellNemKotott { get; set; }
    }
}