using System;
using System.Linq;
using Kreta.Core;
using Kreta.Core.Domain.Interface;
using Kreta.DataAccess.Interfaces;
using Kreta.Enums;

namespace Kreta.BusinessLogic.HelperClasses
{
    public class KirTanuloAdatCo
    {
        public int Id { get; set; }
        public string OktatasiAzonosito { get; set; }
        public string Elotag { get; set; }
        public string Vezeteknev { get; set; }
        public string Utonev { get; set; }
        public string NyomtatasiNev { get; set; }
        public bool NevSorrend { get; set; }
        public string SzuletesiVezeteknev { get; set; }
        public string SzuletesiUtonev { get; set; }
        public bool SzuletesiNevSorrend { get; set; }
        public string AnyjaVezetekNeve { get; set; }
        public string AnyjaUtoneve { get; set; }
        public string AnyjaNeveSorrenddel { get; set; }
        public bool AnyjaNeveSorrend { get; set; }
        public DateTime? SzuletesiDatum { get; set; }
        public string SzuletesiHely { get; set; }
        public int SzuletesiOrszag { get; set; }
        public int Allampolgarsag { get; set; }
        public int? Allampolgarsag2 { get; set; }
        public string SzuletesiNeve { get; set; }
        public string AnyjaNeve { get; set; }
        public int? Nem { get; set; }
        public string TajSzam { get; set; }
        public string Telefonszam { get; set; }
        public string AllandoLakcimIranyitoszam { get; set; }
        public string AllandoLakcimVaros { get; set; }
        public string AllandoLakcimKozteruletNev { get; set; }
        public string AllandoLakcimKozteruletJellegeNev { get; set; }
        public string AllandoLakcimHazszam { get; set; }
        public string TartozkodasiCimIranyitoszam { get; set; }
        public string TartozkodasiCimVaros { get; set; }
        public string TartozkodasiCimKozteruletNev { get; set; }
        public string TartozkodasiCimKozteruletJellegeNev { get; set; }
        public string TartozkodasiCimHazszam { get; set; }

        public DateTime? TankotelezettsegVege { get; set; }
        public bool TankotelezettsegetTeljesito { get; set; }
        public bool SajatosNevelesIgenyu { get; set; }
        public bool BeilleszkedesselKuzd { get; set; }
        public bool JogviszonyStatusza { get; set; }
        public DateTime? JogviszonyKezdete { get; set; }
        public DateTime? JogviszonyVarBefejezese { get; set; }
        public string JogviszonyJellege { get; set; }
        public bool Vendegtanulo { get; set; }
        public bool Magantanulo { get; set; }

        internal static KirTanuloAdatCo EntityToCo(ITanulo tanulo)
        {
            KirTanuloAdatCo kirTanuloAdatCo = new KirTanuloAdatCo
            {
                Id = tanulo.ID,
                OktatasiAzonosito = tanulo.OktatasiAzonosito,
                Nem = tanulo.Neme,
                Elotag = tanulo.Elotag,
                Vezeteknev = tanulo.Vezeteknev,
                Utonev = tanulo.Utonev,
                NyomtatasiNev = tanulo.NyomtatasiNev,
                SzuletesiVezeteknev = !tanulo.SzuletesiNevSorrend ? tanulo.SzuletesiVezeteknev?.Trim() : tanulo.SzuletesiUtonev?.Trim(),
                SzuletesiUtonev = !tanulo.SzuletesiNevSorrend ? tanulo.SzuletesiUtonev?.Trim() : tanulo.SzuletesiVezeteknev?.Trim(),
                AnyjaVezetekNeve = !tanulo.AnyjaNeveSorrend ? tanulo.AnyjaVezetekneve?.Trim() : tanulo.AnyjaUtoneve?.Trim(),
                AnyjaUtoneve = !tanulo.AnyjaNeveSorrend ? tanulo.AnyjaUtoneve?.Trim() : tanulo.AnyjaVezetekneve?.Trim(),
                SzuletesiHely = tanulo.SzuletesiHely,
                SzuletesiDatum = tanulo.SzuletesiDatum,
                SzuletesiOrszag = tanulo.SzuletesiOrszag,
                Allampolgarsag = tanulo.Allampolgarsaga,
                Allampolgarsag2 = tanulo.Allampolgarsaga2
            };

            var oCim = tanulo.Cim.FirstOrDefault(X => X.CimTipusa == (int)CimTipusEnum.allando_lakcim && !X.Torolt);
            if (oCim != null)
            {
                //kirTanuloAdatCo.Ajto = oCim.Ajto;
                //kirTanuloAdatCo.Emelet = oCim.Emelet;
                //kirTanuloAdatCo.Hazszam = oCim.Hazszam;
                //kirTanuloAdatCo.Iranyitoszam = oCim.IranyitoSzam;
                //kirTanuloAdatCo.KozteruletJellege = oCim.KozteruletJellege;
                //kirTanuloAdatCo.KozteruletNeve = oCim.Kozterulet;
                //kirTanuloAdatCo.HelysegNeve = oCim.Varos;
            }

            //if (tanulo.Telefon.Count > 0)
            //{
            //    var tAlap = tanulo.Telefon.FirstOrDefault(x => x.Alapertelmezett && !x.Torolt && !x.IsPublic);
            //    kirTanuloAdatCo.Telefon = tAlap?.TelefonSzam;
            //}

            //if (tanulo.Email.Count > 0)
            //{
            //    var email = tanulo.Email.FirstOrDefault(x => !x.Torolt && !x.IsPublic);
            //    kirTanuloAdatCo.Email = email?.EmailCim;
            //}

            return kirTanuloAdatCo;
        }

        public static KirTanuloAdatCo KirEntityToCo(IKirTanulo kirTanulo) => new KirTanuloAdatCo
        {
            Id = kirTanulo.Id,
            AnyjaUtoneve = kirTanulo.AnyjaUtoneve,
            AnyjaVezetekNeve = kirTanulo.AnyjaVezetekNeve,
            NevSorrend = kirTanulo.NevSorrend,
            Elotag = kirTanulo.NevElotag,
            SzuletesiUtonev = kirTanulo.SzuletesiUtonev,
            SzuletesiVezeteknev = kirTanulo.SzuletesiVezeteknev,
            Utonev = kirTanulo.Utonev,
            Vezeteknev = kirTanulo.Vezeteknev,
            SzuletesiHely = kirTanulo.SzuletesiHely,
            SzuletesiDatum = kirTanulo.SzuletesiDatum,
            Nem = Enum.TryParse(kirTanulo.Nem.RemoveDiacritics(), true, out NemEnum nemEnum) ? (int)nemEnum : (int)NemEnum.NA,
            OktatasiAzonosito = kirTanulo.OktatasiAzonosito,
            Allampolgarsag = Enum.TryParse(kirTanulo.Allampolgarsag.RemoveDiacritics(), true, out AllampolgarsagEnum allampolgarsagEnum) ? (int)allampolgarsagEnum : (int)AllampolgarsagEnum.magyar,
            Allampolgarsag2 = Enum.TryParse(kirTanulo.Allampolgarsag2.RemoveDiacritics(), true, out AllampolgarsagEnum allampolgarsag2Enum) ? (int)allampolgarsag2Enum : (int)AllampolgarsagEnum.magyar,
            SzuletesiOrszag = Enum.TryParse(kirTanulo.SzuletesiOrszag.RemoveDiacritics(), true, out OrszagTipusEnum orszagTipusEnum) ? (int)orszagTipusEnum : (int)OrszagTipusEnum.Magyarorszag,
            BeilleszkedesselKuzd = kirTanulo.BeilleszkedesselKuzd,
            JogviszonyJellege = kirTanulo.JogviszonyJellege,
            JogviszonyKezdete = kirTanulo.JogviszonyKezdete,
            JogviszonyStatusza = kirTanulo.JogviszonyStatusza,
            JogviszonyVarBefejezese = kirTanulo.JogviszonyVarBefejezese,
            Magantanulo = kirTanulo.Magantanulo,
            SajatosNevelesIgenyu = kirTanulo.SajatosNevelesIgenyu,
            TajSzam = kirTanulo.TajSzam,
            TankotelezettsegetTeljesito = kirTanulo.TankotelezettsegetTeljesito,
            TankotelezettsegVege = kirTanulo.TankotelezettsegVege,
            Vendegtanulo = kirTanulo.Vendegtanulo
        };
    }
}