using System;
using System.Collections.Generic;
using System.Data;
using Kreta.Client.Kir.KirModels;
using Kreta.DataAccessManual.Interfaces;

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

        public string OktatasiAzonosito { get; set; }

        public string IntezemenyAzonosito { get; set; }

        private SzotarType Statusz => new SzotarType { SzotarTipus = "TJOGVSTAT", RovidNev = "AKT" };

        private DateTime JogviszonyKezdete => new DateTime(DateTime.Now.Year, 4, 22);

        private DateTime BefejezesVarhatoDatuma => new DateTime(2031, 06, 30);

        private DateTime SzolgaltatasIgenybevetelKezdete => new DateTime(DateTime.Now.Year, 09, 01);

        private SzotarType JogviszonyJellegeKod => new SzotarType { SzotarTipus = "TJOGVJELL", RovidNev = "TANKOT" };

        private IgenNemType Vendegtanulo => IgenNemType.N;

        private IgenNemType Magantanulo => IgenNemType.N;

        private IgenNemType Ideiglenes => IgenNemType.N;

        public int KirSzolgaltatasId { get; set; }

        public int UgyviteliHelyId { get; set; }

        public int TelephelyId { get; set; }

        public string ViseltNevVezeteknev { get; set; }
        public string ViseltNevKeresztnev { get; set; }
        public string ViseltNevNevSorrend { get; set; }
        public string SzuletesiNevVezeteknev { get; set; }
        public string SzuletesiNevKeresztnev { get; set; }
        public string SzuletesiNevNevSorrend { get; set; }
        public string AnyjaNeveVezeteknev { get; set; }
        public string AnyjaNeveKeresztnev { get; set; }
        public string AnyjaNeveNevSorrend { get; set; }
        public DateTime SzuletesiIdo { get; set; }
        public string SzuletesiOrszag { get; set; }
        public string SzuletesiHelyseg { get; set; }
        public string SzuletesiHelysegNev { get; set; }
        public string Allampolgarsag1 { get; set; }
        public string Allampolgarsag1Nev { get; set; }
        public int Nem { get; set; }

        private stringWithRequiredId SzolgaltatasKod => new stringWithRequiredId { id = (ulong)KirSzolgaltatasId };

        private SzotarType Evfolyam => new SzotarType { SzotarTipus = "EVFOLY", RovidNev = "1." };

        public static TanuloJogviszonyBejelentesType[] ConvertNebuloToKirNebulo(IDalHandler h, List<KirNebuloCo> nebuloCo, int intezmenyId, int tanevId)
        {
            var nebuloDal = h.Nebulo();
            var kirTanuloJogviszonyBejelentesList = new List<TanuloJogviszonyBejelentesType>();

            nebuloCo.ForEach(x =>
            {
                string kirFeladatellatasiHelySorszam = nebuloDal.GetNebuloKirFeladatellatasiHelySorszama(x.Id, intezmenyId, tanevId);

                var szolgaltatasIgenybevetelHelyeArray = new TanuloiSzolgaltatasIgenybevetelHelyeAdatType[1] {
                    new TanuloiSzolgaltatasIgenybevetelHelyeAdatType {
                        id = 0,
                        TelephelyId = x.TelephelyId,
                        SzolgaltatasKod = x.SzolgaltatasKod,
                        Evfolyam = x.Evfolyam,
                        IgenybevetelKezdete = x.SzolgaltatasIgenybevetelKezdete
                    }
                };

                kirTanuloJogviszonyBejelentesList.Add(
                    new TanuloJogviszonyBejelentesType
                    {
                        ElemID = x.Id.ToString(),
                        TanuloJogviszony = new BejelentesTanuloiJogviszonyAdatType
                        {
                            id = 0,
                            oktazon = x.OktatasiAzonosito,
                            Intezmeny = x.IntezemenyAzonosito,
                            Statusz = x.Statusz,
                            JogviszonyLetrejotteDatum = x.JogviszonyKezdete,
                            BefejezesVarhatoDatuma = x.BefejezesVarhatoDatuma,
                            BefejezesVarhatoDatumaSpecified = true,
                            JogviszonyJellegeKod = x.JogviszonyJellegeKod,
                            Vendegtanulo = x.Vendegtanulo,
                            Magantanulo = x.Magantanulo,
                            Ideiglenes = x.Ideiglenes,
                            UgyviteliHely = x.UgyviteliHelyId,
                            SzolgaltatasIgenybevetelHelye = szolgaltatasIgenybevetelHelyeArray,
                            EllenorzendoSzemelyesAdatok = new AlapSzemelyAdatType
                            {
                                oktazon = x.OktatasiAzonosito,
                                ViseltNev = new NevType
                                {
                                    Vezeteknev = x.ViseltNevVezeteknev,
                                    Keresztnev = x.ViseltNevKeresztnev,
                                    NevSorrend = NevSorrendType.VEZETEKNEV
                                },
                                SzuletesiNev = new NevType
                                {
                                    Vezeteknev = x.SzuletesiNevVezeteknev,
                                    Keresztnev = x.SzuletesiNevKeresztnev,
                                    NevSorrend = NevSorrendType.VEZETEKNEV
                                },
                                AnyjaNeve = new NevType
                                {
                                    Vezeteknev = x.AnyjaNeveVezeteknev,
                                    Keresztnev = x.AnyjaNeveKeresztnev,
                                    NevSorrend = NevSorrendType.VEZETEKNEV
                                },
                                SzuletesiIdo = x.SzuletesiIdo,
                                SzuletesiOrszag = new stringWithRequiredId
                                {
                                    id = 1
                                },
                                SzuletesiHelyseg = new stringWithId
                                {
                                    id = 1,
                                    Value = x.SzuletesiHelysegNev
                                },
                                Allampolgarsag1 = new stringWithRequiredId
                                {
                                    id = 1,
                                    Value = x.Allampolgarsag1Nev
                                },
                                Nem = x.Nem == 4 ? NemType.F : NemType.N
                            }
                        }
                    });
            });

            return kirTanuloJogviszonyBejelentesList.ToArray();
        }

        public static List<KirNebuloCo> GetNebuloCoListFromDataSet(DataSet nebuloList)
        {
            var coList = new List<KirNebuloCo>();

            foreach (DataRow row in nebuloList.Tables[0].Rows)
            {
                var co = new KirNebuloCo
                {
                    Id = Convert.ToInt32(row["ID"]),
                    OktatasiAzonosito = row["C_OKTATASIAZONOSITOSZAMA"].ToString(),
                    IntezemenyAzonosito = row["C_OMKOD"].ToString(),
                    KirSzolgaltatasId = Convert.ToInt32(row["C_CODE"]),

                    ViseltNevVezeteknev = row["ViseltNevVezeteknev"].ToString(),
                    ViseltNevKeresztnev = row["ViseltNevKeresztnev"].ToString(),
                    ViseltNevNevSorrend = row["ViseltNevNevSorrend"].ToString(),
                    SzuletesiNevVezeteknev = row["SzuletesiNevVezeteknev"].ToString(),
                    SzuletesiNevKeresztnev = row["SzuletesiNevKeresztnev"].ToString(),
                    SzuletesiNevNevSorrend = row["SzuletesiNevNevSorrend"].ToString(),
                    AnyjaNeveVezeteknev = row["AnyjaNeveVezeteknev"].ToString(),
                    AnyjaNeveKeresztnev = row["AnyjaNeveKeresztnev"].ToString(),
                    AnyjaNeveNevSorrend = row["AnyjaNeveNevSorrend"].ToString(),
                    SzuletesiIdo = Convert.ToDateTime(row["SzuletesiIdo"].ToString()),
                    SzuletesiOrszag = row["SzuletesiOrszag"].ToString(),
                    SzuletesiHelyseg = row["SzuletesiHelyseg"].ToString(),
                    SzuletesiHelysegNev = row["SzuletesiHelysegNev"].ToString(),
                    Allampolgarsag1 = row["Allampolgarsag1"].ToString(),
                    Allampolgarsag1Nev = row["Allampolgarsag1Nev"].ToString(),
                    Nem = Convert.ToInt32(row["Nem"].ToString())
                };

                coList.Add(co);
            }

            return coList;
        }
    }
}