using System;
using System.Data;
using System.Linq;
using Kreta.BusinessLogic.Classes;
using Kreta.Core;
using Kreta.DataAccess.Interfaces;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;

namespace Kreta.BusinessLogic.HelperClasses
{
    public class NebuloCo
    {
        public int? Id { get; set; }

        public string Elotag { get; set; }

        public string Vezeteknev { get; set; }

        public string Keresztnev { get; set; }

        public string SzuletesiVezeteknev { get; set; }

        public string SzuletesiVezeteknevComparableString { get; set; }

        public string SzuletesiKeresztnev { get; set; }

        public string SzuletesiKeresztnevComparableString { get; set; }

        public string OktatasiAzonositoSzama { get; set; }

        public int? NemeId { get; set; }

        public string NemeNev { get; set; }

        public int? SzuletesiOrszagId { get; set; }

        public string SzuletesiOrszagNev { get; set; }

        public string SzuletesiHely { get; set; }

        public string SzuletesiHelyComparableString { get; set; }

        public DateTime? SzuletesiIdo { get; set; }

        public string SzuletesiIdoComparableString { get; set; }

        public string AnyjaVezetekneve { get; set; }

        public string AnyjaVezetekneveComparableString { get; set; }

        public string AnyjaKeresztneve { get; set; }

        public string AnyjaKeresztneveComparableString { get; set; }

        public int? AnyanyelvId { get; set; }

        public string AnyanyelvNev { get; set; }

        public int? AllampolgarsagId { get; set; }

        public string AllampolgarsagNev { get; set; }

        public int? Allampolgarsag2Id { get; set; }

        public string Allampolgarsag2Nev { get; set; }

        public int? Orszag { get; set; }

        public string Iranyitoszam { get; set; }

        public string Helyseg { get; set; }

        public string KozteruletNev { get; set; }

        public string KozteruletJellegNev { get; set; }

        public string Hazszam { get; set; }

        public string Emelet { get; set; }

        public string Ajto { get; set; }

        public bool THCimeAzonos { get; set; }

        public int? THOrszag { get; set; }

        public string THIranyitoszam { get; set; }

        public string THHelyseg { get; set; }

        public string THKozteruletNev { get; set; }

        public string THKozteruletJellegNev { get; set; }

        public string THHazszam { get; set; }

        public string THEmelet { get; set; }

        public string THAjto { get; set; }

        public string TKNev { get; set; }

        public int? TKRokonsagiFokId { get; set; }

        public string TKRokonsagiFokNev { get; set; }

        public string TKEmail { get; set; }

        public string TKTelefon { get; set; }

        public bool TKCimeAzonos { get; set; }

        public int? TKOrszag { get; set; }

        public string TKIranyitoszam { get; set; }

        public string TKHelyseg { get; set; }

        public string TKKozteruletNev { get; set; }

        public string TKKozteruletJellegNev { get; set; }

        public string TKHazszam { get; set; }

        public string TKEmelet { get; set; }

        public string TKAjto { get; set; }

        public string TKNev2 { get; set; }

        public int? TKRokonsagiFok2Id { get; set; }

        public string TKRokonsagiFok2Nev { get; set; }

        public string TKEmail2 { get; set; }

        public string TKTelefon2 { get; set; }

        public bool TKCimeAzonos2 { get; set; }

        public int? TKOrszag2 { get; set; }

        public string TKIranyitoszam2 { get; set; }

        public string TKHelyseg2 { get; set; }

        public string TKKozteruletNev2 { get; set; }

        public string TKKozteruletJelleg2Nev { get; set; }

        public string TKHazszam2 { get; set; }

        public string TKEmelet2 { get; set; }

        public string TKAjto2 { get; set; }

        //public string OvodaAzonosito { get; set; }

        //public string OvodaNev { get; set; }

        public int? FeladatellatasiHelyId { get; set; }

        public string FeladatellatasiHelyNev { get; set; }

        public int? KirSzolgaltatasTipusId { get; set; }

        public string KirSzolgaltatasTipusNev { get; set; }

        public int? TagozatId { get; set; }

        public string TagozatNev { get; set; }

        public bool EletvitelszeruOttLakasKorzetes { get; set; }

        public bool SzakertoiBizottsagKormanyhivatalAltalKijelolttanulo { get; set; }

        public bool SzulojeTestvereTartosanBetegVagyFogyatekkalElo { get; set; }

        public bool TestvereAzIntezmenyTanuloja { get; set; }

        public bool SzulojenekMunkahelyeAzIskolaKorzetebenTalalhato { get; set; }

        public bool AzIskolaALakohelyetolEgyKilometerenBelulTalalhato { get; set; }

        public bool IsOsszevontOsztaly { get; set; }

        public int? EtikaHitErkolcstanId { get; set; }

        public string EtikaHitErkolcstanNev { get; set; }

        public string Megjegyzes { get; set; }

        public int? FelvetelStatuszaId { get; set; }

        public string FelvetelStatuszaNev { get; set; }
        public string Osztalya { get; set; }

        public bool? SNI { get; set; }
        public double? SNILetszamSuly { get; set; }
        public bool? BTM { get; set; }
        public double? BTMLetszamSuly { get; set; }

        public bool Importalt { get; set; }

        public string EugyUgyiratszam { get; set; }

        public int EugyStatusz { get; set; }

        public DateTime EugyStatuszDatum { get; set; }

        public string Indoklas { get; set; }

        public bool EugyBAIRogzitett { get; set; }

        public bool Torolt { get; set; }

        //public bool IsKozpontiMegjelent { get; set; }

        #region 2021
        public bool NincsOktatasiAzonosito { get; set; }
        public string NincsOktatasiAzonositoIndok { get; set; }
        public string TKSzuletesiNev { get; set; }
        public string TK2SzuletesiNev { get; set; }
        public int? TKJogalap { get; set; }
        public int? TK2Jogalap { get; set; }
        public double? OvodaEvekSzama { get; set; }
        //public bool NemMagyarOvoda { get; set; }
        public int? HatranyosHelyzet { get; set; }
        public int? Nemzetisegi { get; set; }
        public int? Felekezet { get; set; }
        public string FelekezetNev { get; set; }
        public string TagozatNeve { get; set; }
        #endregion

        public NebuloCo()
        {

        }

        public NebuloCo(INebulo entity, DataSet feladatellatasiHelyDataSet, int tanevId)
        {
            Id = entity.ID;
            Elotag = entity.Elotag;
            Vezeteknev = entity.TanuloCsaladiNeve;
            Keresztnev = entity.TanuloUtoneve;
            OktatasiAzonositoSzama = entity.OktatasiAzonositoSzama;
            NemeId = entity.Neme;
            NemeNev = entity.Neme.GetDisplayName<NemEnum>(tanevId);
            SzuletesiVezeteknev = entity.SzuletesiCsaladiNeve;
            SzuletesiVezeteknevComparableString = entity.SzuletesiCsaladiNeve?.ToComparableString();
            SzuletesiKeresztnev = entity.SzuletesiUtoneve;
            SzuletesiKeresztnevComparableString = entity.SzuletesiUtoneve?.ToComparableString();
            SzuletesiOrszagId = entity.SzuletesiOrszag;
            SzuletesiOrszagNev = entity.SzuletesiOrszag.GetDisplayName<OrszagTipusEnum>(tanevId);
            SzuletesiHely = entity.SzuletesiHely;
            SzuletesiHelyComparableString = entity.SzuletesiHely?.ToComparableString();
            SzuletesiIdo = entity.SzuletesiIdo;
            SzuletesiIdoComparableString = entity.SzuletesiIdo.ToString(Constants.ToStringPattern.SortableDateTimePattern).ToComparableString();
            AnyjaVezetekneve = entity.EdesanyjaSzuletesiCsaladiNeve;
            AnyjaVezetekneveComparableString = entity.EdesanyjaSzuletesiCsaladiNeve?.ToComparableString();
            AnyjaKeresztneve = entity.EdesanyjaSzuletesiUtoneve;
            AnyjaKeresztneveComparableString = entity.EdesanyjaSzuletesiUtoneve?.ToComparableString();
            AnyanyelvId = entity.Anyanyelve;
            AnyanyelvNev = entity.Anyanyelve.GetDisplayName<AnyanyelvEnum>(tanevId);
            AllampolgarsagId = entity.Allampolgarsaga;
            AllampolgarsagNev = entity.Allampolgarsaga.GetDisplayName<AllampolgarsagEnum>(tanevId);
            Allampolgarsag2Id = entity.Allampolgarsaga2;
            Allampolgarsag2Nev = entity.Allampolgarsaga2.GetDisplayName<AllampolgarsagEnum>(tanevId);
            Orszag = entity.OrszagTipusId;
            Iranyitoszam = entity.Iranyitoszam;
            Helyseg = entity.HelysegNev;
            KozteruletNev = entity.KozteruletNev;
            KozteruletJellegNev = entity.KozteruletJellegeNev;
            Hazszam = entity.Hazszam;
            Emelet = entity.Emelet;
            Ajto = entity.Ajto;

            THCimeAzonos = entity.TartozkodasiHelyAzonos;
            THOrszag = entity.THOrszagTipusId;
            THIranyitoszam = entity.THIranyitoszam;
            THHelyseg = entity.THHelysegNev;
            THKozteruletNev = entity.THKozteruletNev;
            THKozteruletJellegNev = entity.THKozteruletJellegeNev;
            THHazszam = entity.THHazszam;
            THEmelet = entity.THEmelet;
            THAjto = entity.THAjto;

            TKNev = entity.TKNeve;
            TKRokonsagiFokId = entity.TKRokonsagiFoka;
            TKRokonsagiFokNev = entity.TKRokonsagiFoka.GetDisplayName<RokonsagiFokEnum>(tanevId);
            TKEmail = entity.TKEmailCim;
            TKTelefon = entity.TKTelefon;
            TKCimeAzonos = entity.KepviseloCimeAzonos;
            TKOrszag = entity.TKOrszagTipusId;
            TKIranyitoszam = entity.TKIranyitoszam;
            TKHelyseg = entity.TKHelysegNev;
            TKKozteruletNev = entity.TKKozteruletNev;
            TKKozteruletJellegNev = entity.TKKozteruletJellegeNev;
            TKHazszam = entity.TKHazszam;
            TKEmelet = entity.TKEmelet;
            TKAjto = entity.TKAjto;

            TKNev2 = entity.TKNeve2;
            TKRokonsagiFok2Id = entity.TKRokonsagiFoka2;
            TKRokonsagiFok2Nev = entity.TKRokonsagiFoka2.GetDisplayName<RokonsagiFokEnum>(tanevId);
            TKEmail2 = entity.TKEmailCim2;
            TKTelefon2 = entity.TKTelefon2;
            TKCimeAzonos2 = entity.Kepviselo2CimeAzonos;
            TKOrszag2 = entity.TKOrszagTipusId2;
            TKIranyitoszam2 = entity.TKIranyitoszam2;
            TKHelyseg2 = entity.TKHelysegNev2;
            TKKozteruletNev2 = entity.TKKozteruletNev2;
            TKKozteruletJelleg2Nev = entity.TKKozteruletJellegeNev2;
            TKHazszam2 = entity.TKHazszam2;
            TKEmelet2 = entity.TKEmelet2;
            TKAjto2 = entity.TKAjto2;

            //OvodaAzonosito = entity.OvodaAzonosito;
            //OvodaNev = entity.OvodaNeve;
            Osztalya = entity.Osztalya;
            Indoklas = entity.Indoklas;

            int? feladatellatasiHelyValue = entity.FeladatEllatasiHelyId;
            int? feladatellatasiHelyId = null;
            string feladatellatasiHelyNev = null;
            if (feladatellatasiHelyValue.IsEntityId())
            {
                DataRow feladatellatasiHelyDataRow = feladatellatasiHelyDataSet.Tables[0].AsEnumerable().SingleOrDefault(x => SDAConvert.ToNullableInt32(x["ID"]) == feladatellatasiHelyValue.Value);
                if (feladatellatasiHelyDataRow != default(DataRow))
                {
                    feladatellatasiHelyId = SDAConvert.ToNullableInt32(feladatellatasiHelyDataRow["ID"]);
                    feladatellatasiHelyNev = SDAConvert.ToString(feladatellatasiHelyDataRow["Nev"]);
                }
            }
            FeladatellatasiHelyId = feladatellatasiHelyId;
            FeladatellatasiHelyNev = feladatellatasiHelyNev;

            KirSzolgaltatasTipusId = entity.KirSzolgaltatasTipusId.IsEntityId() ? entity.KirSzolgaltatasTipusId : null;
            KirSzolgaltatasTipusNev = entity.KirSzolgaltatasTipusId.IsEntityId() ? entity.KirSzolgaltatasTipusId.GetDisplayName<KirSzolgaltatasTipusEnum>(tanevId) : null;
            TagozatId = entity.Tagozat;
            TagozatNev = entity.Tagozat.GetDisplayName<TagozatTipusEnum>(tanevId);
            EtikaHitErkolcstanId = entity.EtikaHitErkolcstan;
            EtikaHitErkolcstanNev = entity.EtikaHitErkolcstan.GetDisplayName<EtikaHitErkolcstanEnum>(tanevId);
            Megjegyzes = entity.Megjegyzes;
            FelvetelStatuszaId = entity.FelvetelStatusza;
            FelvetelStatuszaNev = entity.FelvetelStatusza.GetDisplayName<FelvetelStatuszaTipusEnum>(tanevId);
            EletvitelszeruOttLakasKorzetes = entity.EletvitelszeruOttLakasKorzetes ?? false;
            SzakertoiBizottsagKormanyhivatalAltalKijelolttanulo = entity.SzakertoiBizottsagKormanyhivatalAltalKijelolttanulo ?? false;
            SzulojeTestvereTartosanBetegVagyFogyatekkalElo = entity.SzulojeTestvereTartosanBetegVagyFogyatekkalElo ?? false;
            TestvereAzIntezmenyTanuloja = entity.TestvereAzIntezmenyTanuloja ?? false;
            SzulojenekMunkahelyeAzIskolaKorzetebenTalalhato = entity.SzulojenekMunkahelyeAzIskolaKorzetebenTalalhato ?? false;
            AzIskolaALakohelyetolEgyKilometerenBelulTalalhato = entity.AzIskolaALakohelyetolEgyKilometerenBelulTalalhato ?? false;
            IsOsszevontOsztaly = entity.IsOsszevontOsztalyba;
            SNI = entity.SNI;
            SNILetszamSuly = entity.SNILetszamSuly;
            BTM = entity.BTM;
            BTMLetszamSuly = entity.BTMLetszamSuly;
            EugyUgyiratszam = entity.EugySzam;

            Importalt = entity.Importalt;

            EugyBAIRogzitett = entity.EugybaiRogzitett;
            Torolt = entity.Torolt;

            //IsKozpontiMegjelent = entity.IsKozpontiMegjelent;

            #region 2021
            TKSzuletesiNev = entity.TKSzuletesiNev;
            TK2SzuletesiNev = entity.TKSzuletesiNev2;
            TKJogalap = entity.TKJogalapTipusId;
            TK2Jogalap = entity.TKJogalapTipus2Id;
            OvodaEvekSzama = entity.OvodaiEvek;
            //NemMagyarOvoda = entity.IsNemMagyarOvoda;
            NincsOktatasiAzonosito = entity.IsOktAzonNelkuli;
            NincsOktatasiAzonositoIndok = entity.OktAzonIndoklas;
            Felekezet = entity.FelekezetTipusId;
            HatranyosHelyzet = entity.HatranyosHelyzetTipusId;
            Nemzetisegi = entity.NemzetisegTipusId;
            TagozatNeve = entity.Tagozatnev;
            #endregion
        }
    }
}