using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mime;
using System.Text;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using Kendo.Mvc.Extensions;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Security;
using Kreta.Core;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Resources;
using Kreta.Web.Areas.Tanulo.Helper;
using Kreta.Web.Areas.Tanulo.Models;
using Kreta.Web.Areas.TanuloErtekeles.Controllers;
using Kreta.Web.Controllers;
using Kreta.Web.Helpers;
using Kreta.Web.Helpers.Error;
using Kreta.Web.Helpers.Modal;
using Kreta.Web.Models;
using Kreta.Web.Models.EditorTemplates;
using Kreta.Web.Security;
using Newtonsoft.Json;

namespace Kreta.Web.Areas.Tanulo.Controllers
{
    [MvcRoleClaimsAuthorize(true)]
    [MvcRolePackageDenyAuthorize(TanevEnum.Mind, KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)]
    [MvcRolePackageAuthorize(TanevEnum.Mind, KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Evfolyamfelelos.ClaimValue, KretaClaimPackages.AMImodul.ClaimValue)]
    public class AmiTanuloController : Controller
    {
        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.AMImodul.ClaimValue)]
        public ActionResult Index()
        {
            var model = new TanuloSearchModel();
            TanuloLogic.SetButtonVisibility(model);

            return View("Index", model);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.AMImodul.ClaimValue)]
        [System.Web.Mvc.ActionName("AktivTanulokByOsztaly")]
        public ActionResult Index(int osztalyId)
        {
            var model = new TanuloSearchModel
            {
                FeladatKategoriaId = Constants.MindenErteke.FeladatKategoria,
                Aktiv = true,
                OsztalyCsoportId = osztalyId
            };

            TanuloLogic.SetButtonVisibility(model);

            return View("Index", model);
        }

        public ActionResult GetPartialView(string id, string partialViewName)
        {
            var model = AmiTanuloLogic.GetTanuloData(int.Parse(id));
            return PartialView(partialViewName, model);
        }

        public ActionResult GetModPartialView(string id, string partialViewName, int? osztalyId = null)
        {
            var model = AmiTanuloLogic.GetModTanuloData(int.Parse(id), osztalyId);

            //sablonizálóhoz
            int tanuloId = int.Parse(id);
            var api = new ComboBoxHelperApiController();

            ViewData["Sablonok"] = api.GetSablonokDropDown(model.TanuloTanugyModel.OsztalyId ?? 0);

            ViewData["Osztalyok"] = api.GetAMITanuloOsztalyCsoportokEgyeniNelkulDropDown(tanuloId, ClaimData.IsActivTanev);
            ViewData["EgyeniCsoportok"] = api.GetTanuloEgyeniCsoportokDropDown(tanuloId, model.TanuloTanugyModel.OsztalyId ?? 0, !ClaimData.IsActivTanev);
            ViewData["Tanarok"] = api.GetTanarDropDown();

            ViewData["AmiFotargyak"] = api.GetAMIFotargyList();
            ViewData["AmiTagozatok"] = api.GetAMITagozatList();
            ViewData["AmiTantargyKotelezosegek"] = api.GetAMITantargyKotelezosegList();
            ViewData["EvfolyamTipusok"] = api.GetAmiEvfolyamList();

            ViewData["TantargyakSablonokkal"] = GetTantargyakSablonokkal();

            var helper = new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType());

            (int? osztalyCsoportId, int? osztalyCsoportVezetoId) = helper.GetDefaultAMINemEgyeniOsztalyCsoportAndVezeto(tanuloId);

            ViewData["OsztalyCsoportId"] = osztalyCsoportId;
            ViewData["OsztalyCsoportVezetoId"] = osztalyCsoportVezetoId;

            (int? egyeniCsoportId, int? egyeniCsoportVezetoId) = helper.GetDefaultEgyeniCsoportAndVezeto(tanuloId, model.TanuloTanugyModel.OsztalyId ?? 0, !ClaimData.IsActivTanev);

            ViewData["EgyeniCsoportId"] = egyeniCsoportId;
            ViewData["EgyeniCsoportVezetoId"] = egyeniCsoportVezetoId;

            return PartialView(partialViewName, model);
        }

        [MvcRolePackageAuthorize(TanevEnum.Mind, KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Evfolyamfelelos.ClaimValue, KretaClaimPackages.AMImodul.ClaimValue, KretaClaimPackages.Naplo.ClaimValue)]
        public ActionResult GetPartialViewWithOsztalycsoport(string id, string osztalyCsoportIdString, string partialViewName)
        {
            int? osztalyCsoportId = null;
            if (int.TryParse(osztalyCsoportIdString, out int resultId))
            { osztalyCsoportId = resultId; }

            var model = AmiTanuloLogic.GetTanuloData(int.Parse(id), osztalyCsoportId);
            return PartialView(partialViewName, model);
        }

        public ActionResult GetModPartialViewWithOsztalycsoport(string id, string osztalyCsoportIdString, string partialViewName)
        {
            int? osztalyCsoportId = null;
            if (int.TryParse(osztalyCsoportIdString, out int resultId))
            { osztalyCsoportId = resultId; }

            var model = AmiTanuloLogic.GetModTanuloData(int.Parse(id), osztalyCsoportId);
            return PartialView(partialViewName, model);
        }

        public ActionResult GetTanuloErtekelesPartialView(int tanuloId, string partialViewName, string namePrefix)
        {
            var tanuloOktatasiNevelesiFeladatIds = new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType())
                .GetTanuloOktatasiNevelesiFeladatIdList(tanuloId, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas);

            var model = new TanuloErtekelesByTanuloController().PartialViewModel(tanuloId, namePrefix, tanuloOktatasiNevelesiFeladatIds);
            return PartialView(partialViewName, model);
        }

        #region Popups

        [MvcRolePackageAuthorize(TanevEnum.Mind, KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Evfolyamfelelos.ClaimValue)]
        public ActionResult OpenJogviszonySzuneteltetes()
        {
            var pm = new PopUpModel(new JogviszonySzuneteltetesModel(), "Edit_JogviszonySzuneteltetes");
            pm = pm.AddBtn(pm, "JogviszonySzuneteltetesCancel", CommonResource.Megse, "JogviszonySzuneteltetesHelper.Cancel");
            pm = pm.AddBtn(pm, "JogviszonySzuneteltetesSave", CommonResource.Mentes, "JogviszonySzuneteltetesHelper.Save");

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult OpenDetailTanuloPopUp(int tanuloId, int? osztalycsoportId, bool ertekelesTabAktiv = false, bool fromAdd = false)
        {
            var tanuloDetailModel = new TanuloDetailModel { TanuloId = tanuloId, OsztalycsoportId = osztalycsoportId };
            var popUpModel = new PopUpModel(new TanuloSearchModel
            {
                TanuloId = tanuloId,
                TanuloModalHeader = TanuloLogic.GetTanuloModalHeader(tanuloId),
                TabList = AmiTanuloLogic.GetDetailTabs(tanuloDetailModel, ertekelesTabAktiv),
                OsztalyCsoportId = osztalycsoportId
            }, "Tanulo_Info");

            popUpModel = popUpModel.AddCancelBtn(popUpModel, fromAdd ? "TanuloHelper.modTanuloCancel" : "TanuloHelper.detailTanuloCancel");

            return PartialView(Constants.General.PopupView, popUpModel);
        }

        public ActionResult OpenModTanuloPopUp(int tanuloId, int? osztalycsoportId)
        {
            var tm = AmiTanuloLogic.GetModTanuloData(tanuloId, osztalycsoportId);
            TanuloLogic.SetTanuloSzakkepzesesBasicProperties(tm);

            tm.TanuloAlapAdatModel.NemList = TanuloLogic.GetNemList(true);
            tm.TanuloAlapAdatModel.FelhasznaloiNevGeneralasModja = TanuloLogic.GetFelhasznaloiNevGeneralasModja(tm);
            tm.TanuloModalHeader = TanuloLogic.GetTanuloModalHeader(tanuloId);

            tm.TabList = AmiTanuloLogic.GetModTabs(tm, ClaimData.IsOsztalyfonok, osztalycsoportId);

            var pm = new PopUpModel(tm, "Tanulo_Bevitel");
            pm = pm.AddCancelBtn(pm, "TanuloHelper.modTanuloCancel");
            pm = pm.AddOkBtn(pm, "TanuloHelper.modTanuloSave");

            //sablonizálóhoz
            var api = new ComboBoxHelperApiController();

            ViewData["Sablonok"] = api.GetSablonokDropDown(tm.TanuloTanugyModel.OsztalyId ?? 0);

            ViewData["Osztalyok"] = api.GetAMITanuloOsztalyCsoportokEgyeniNelkulDropDown(tanuloId, ClaimData.IsActivTanev);
            ViewData["EgyeniCsoportok"] = api.GetTanuloEgyeniCsoportokDropDown(tanuloId, tm.TanuloTanugyModel.OsztalyId ?? 0, !ClaimData.IsActivTanev);
            ViewData["Tanarok"] = api.GetTanarDropDown();

            ViewData["AmiFotargyak"] = api.GetAMIFotargyList();
            ViewData["AmiTagozatok"] = api.GetAMITagozatList();
            ViewData["AmiTantargyKotelezosegek"] = api.GetAMITantargyKotelezosegList();
            ViewData["EvfolyamTipusok"] = api.GetAmiEvfolyamList();

            ViewData["TantargyakSablonokkal"] = GetTantargyakSablonokkal();

            var helper = new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType());

            (int? osztalyCsoportId, int? osztalyCsoportVezetoId) = helper.GetDefaultAMINemEgyeniOsztalyCsoportAndVezeto(tanuloId);

            ViewData["OsztalyCsoportId"] = osztalyCsoportId;
            ViewData["OsztalyCsoportVezetoId"] = osztalyCsoportVezetoId;

            (int? egyeniCsoportId, int? egyeniCsoportVezetoId) = helper.GetDefaultEgyeniCsoportAndVezeto(tanuloId, tm.TanuloTanugyModel.OsztalyId ?? 0, !ClaimData.IsActivTanev);

            ViewData["EgyeniCsoportId"] = egyeniCsoportId;
            ViewData["EgyeniCsoportVezetoId"] = egyeniCsoportVezetoId;

            return PartialView(Constants.General.PopupView, pm);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.AMImodul.ClaimValue)]
        public ActionResult OpenTobbesModTanuloPopUp(List<TanuloTobbesModAdat> tobbesModAdatList)
        {
            var model = new TanuloTobbesModModel { TanuloTobbesTanugyModel = new TanuloTobbesTanugyModel() };

            var helper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
            var osztalyJellemzoi = helper.GetOsztalyJellemzoi();
            model.TanuloTobbesTanugyModel.IsSzakkepzeses = osztalyJellemzoi[OsztalyJellemzoEnum.IsSzakkepzeses];
            model.TanuloTobbesTanugyModel.IsNKTSzakkepzeses = osztalyJellemzoi[OsztalyJellemzoEnum.IsNKTSzakkepzeses] && ClaimData.IsSelectedTanev20_21OrLater;

            var osztalyIdList = tobbesModAdatList.Where(x => x.OsztalyId.IsEntityId()).Select(x => x.OsztalyId.Value).Distinct().ToList();
            var tanuloHelper = new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType());
            model.TanuloTobbesTanugyModel.IsAllOsztalyAltalanosIskolaFeladatellatasiHely = tanuloHelper.IsAllOsztalyAltalanosIskolaFeladatellatasiHely(osztalyIdList);

            model.TabList = AmiTanuloLogic.GetTanuloTobbesModTabs(model);

            foreach (var item in tobbesModAdatList)
            {
                model.TobbesModIdList.Add(new TanuloTobbesModId() { TanuloId = item.TanuloId, OsztalyId = item.OsztalyId });
            }

            model.TanuloNevArray = string.Join(", ", tobbesModAdatList.Select(x => x.TanuloNev));

            var pm = new PopUpModel(model, "TanuloTobbesModify_Bevitel");
            pm = pm.AddCancelBtn(pm, "TanuloHelper.modifyCancel");
            pm = pm.AddOkBtn(pm, "TanuloHelper.confirmCsopModWindow");

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult NewElerhetosegTel(int tanuloId)
        {
            var model = new CimElerhetosegModel()
            {
                FelhasznaloId = tanuloId,
                TanulovalEgyezik = true,
                AlapertelmezettTel = true,
                TelefonKotelezo = true,
                FormSettings = new List<string>() {
                    CimElerhetosegConstant.TelSectionVisible,
                    CimElerhetosegConstant.IsNew,
                    CimElerhetosegConstant.AlapertelmezettTelVisible
                }
            };
            model.AlapertelmezettTel = !(new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType()).HasTanuloAlapertelmezettTelefon(tanuloId));
            var pm = new PopUpModel(model, "_Elerhetoseg_Tel_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegTelHelper.newElerhetosegTelCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegTelHelper.newElerhetosegTelSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult ModElerhetosegTel(int id)
        {
            var model = TanuloLogic.GetTanuloElerhetosegTel(id);
            model.TanulovalEgyezik = true;
            model.TelefonKotelezo = true;
            model.FormSettings = new List<string>() {
                CimElerhetosegConstant.TelSectionVisible,
                CimElerhetosegConstant.AlapertelmezettTelVisible
            };
            var pm = new PopUpModel(model, "_Elerhetoseg_Tel_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegTelHelper.modElerhetosegTelCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegTelHelper.modElerhetosegTelSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult NewElerhetosegEmail(int tanuloId)
        {
            var model = new CimElerhetosegModel()
            {
                FelhasznaloId = tanuloId,
                AlapertelmezettEmail = true,
                TanulovalEgyezik = true,
                EmailcimKotelezo = true,
                EmailTipusKotelezo = true,
                FormSettings = new List<string>() {
                    CimElerhetosegConstant.EmailSectionVisible,
                    CimElerhetosegConstant.IsNew,
                    CimElerhetosegConstant.AlapertelmezettEmailVisible
                }
            };
            model.AlapertelmezettEmail = !(new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType()).HasTanuloAlapertelmezettEmail(tanuloId));
            var pm = new PopUpModel(model, "_Elerhetoseg_Email_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegEmailHelper.newElerhetosegEmailCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegEmailHelper.newElerhetosegEmailSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult ModElerhetosegEmail(int id)
        {
            var model = TanuloLogic.GetTanuloElerhetosegEmail(id);
            model.TanulovalEgyezik = true;
            model.EmailcimKotelezo = true;
            model.EmailTipusKotelezo = true;
            model.FormSettings = new List<string>() {
                CimElerhetosegConstant.EmailSectionVisible,
                CimElerhetosegConstant.AlapertelmezettEmailVisible
            };
            var pm = new PopUpModel(model, "_Elerhetoseg_Email_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegEmailHelper.modElerhetosegEmailCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegEmailHelper.modElerhetosegEmailSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult NewElerhetosegCim(int tanuloId)
        {
            var model = new CimElerhetosegModel()
            {
                FelhasznaloId = tanuloId,
                Orszag = (int)OrszagTipusEnum.Magyarorszag,
                CimTipus = (int)CimTipusEnum.allando_lakcim,
                AlapertelmezettCim = false,
                FormSettings = new List<string>() {
                    CimElerhetosegConstant.CimSectionVisible,
                    CimElerhetosegConstant.IsNew,
                    CimElerhetosegConstant.AlapertelmezettCimVisible
                }
            };

            var pm = new PopUpModel(model, "_Elerhetoseg_Cim_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegCimHelper.newElerhetosegCimCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegCimHelper.newElerhetosegCimSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult ModElerhetosegCim(int id)
        {
            var model = TanuloLogic.GetTanuloElerhetosegCim(id);
            model.FormSettings = new List<string>(){
                CimElerhetosegConstant.CimSectionVisible,
                CimElerhetosegConstant.AlapertelmezettCimVisible };
            model.IsAlapertelmezettModosithato = !model.AlapertelmezettCim;

            var pm = new PopUpModel(model, "_Elerhetoseg_Cim_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloElerhetosegCimHelper.modElerhetosegCimCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloElerhetosegCimHelper.modElerhetosegCimSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.AMImodul.ClaimValue, KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Evfolyamfelelos.ClaimValue, KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.CsoportVezeto.ClaimValue, KretaClaimPackages.Tanar.ClaimValue)]
        public ActionResult Info_GondviselokCimGrid(int id)
        {
            return PartialView("Info_GondviselokCimGrid", id);
        }

        public ActionResult NewGondviselo(int tanuloId)
        {
            var model = new TanuloModGondviseloModel()
            {
                TanulovalEgyezik = true,
                GondviseloAutoEmail = !ClaimData.IsSzirIntezmeny,
                FileLetoltesSzukseges = !ClaimData.IsSzirIntezmeny,
                RokonsagiFok = (int)RokonsagiFokEnum.na,
                FelhasznaloId = tanuloId,
                EmailcimKotelezo = false,
                EmailTipusKotelezo = false,
                TelefonKotelezo = false,
                IsGondviseloElerhetoseg = false,
                FormSettings = new List<string>() {
                    CimElerhetosegConstant.EmailSectionVisible,
                    CimElerhetosegConstant.TelSectionVisible,
                    CimElerhetosegConstant.TanuloElerhetosegEmailVisible,
                    CimElerhetosegConstant.TanuloElerhetosegTelVisible
                },
                IsSzirIntezmeny = ClaimData.IsSzirIntezmeny
            };

            var pm = new PopUpModel(model, "_Gondviselo_Bevitel");
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnGondviseloCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloGondviseloHelper.newGondviseloCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnGondviseloOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloGondviseloHelper.newGondviseloSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult ModGondviselo(int id)
        {
            var model = TanuloLogic.GetTanuloGondviselo(id);
            model.TanulovalEgyezik = true;
            model.EmailcimKotelezo = false;
            model.EmailTipusKotelezo = false;
            model.TelefonKotelezo = false;
            model.IsGondviseloElerhetoseg = false;
            model.FormSettings = new List<string>() {
                CimElerhetosegConstant.EmailSectionVisible,
                CimElerhetosegConstant.TelSectionVisible,
                CimElerhetosegConstant.TanuloElerhetosegEmailVisible,
                CimElerhetosegConstant.TanuloElerhetosegTelVisible
            };
            model.IsSzirIntezmeny = ClaimData.IsSzirIntezmeny;
            var pm = new PopUpModel(model, "_Gondviselo_Bevitel");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnGondviseloCancel", Text = Resources.CommonResource.Megse, EventName = "TanuloGondviseloHelper.modGondviseloCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnGondviseloOk", Text = Resources.CommonResource.Mentes, EventName = "TanuloGondviseloHelper.modGondviseloSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult NewGondviseloCim(int tanuloId)
        {
            var model = new CimElerhetosegModel()
            {
                FelhasznaloId = tanuloId,
                CimTipus = (int)CimTipusEnum.allando_lakcim,
                AlapertelmezettCim = true,
                IsGondviseloElerhetoseg = true,
                TanulovalEgyezik = false,
                FormSettings = new List<string>() {
                    CimElerhetosegConstant.CimSectionVisible,
                    CimElerhetosegConstant.IsNew,
                    CimElerhetosegConstant.AlapertelmezettCimVisible
                }
            };
            var pm = new PopUpModel(model, "_Elerhetoseg_Cim_BevitelGondv");

            var tanuloHelper = new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType());
            if (!tanuloHelper.CheckLetezikGondviseloAllandoLakcim(tanuloId))
            {
                model.CimTipus = (int)CimTipusEnum.allando_lakcim;
            }

            model.GondviselokAlapertelmezettCimmel = tanuloHelper.GondviselokAlapertelmezettCimmel(tanuloId);

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "GondviseloElerhetosegCimHelper.newGondviseloCimCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "GondviseloElerhetosegCimHelper.newGondviseloCimSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        public ActionResult ModGondviseloCim(int id)
        {
            var model = TanuloLogic.GetGondviseloElerhetosegCim(id);
            model.IsGondviseloElerhetoseg = true;
            model.FormSettings = new List<string>() {
                CimElerhetosegConstant.CimSectionVisible,
                CimElerhetosegConstant.AlapertelmezettCimVisible
            };
            var pm = new PopUpModel(model, "_Elerhetoseg_Cim_BevitelGondv");

            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegCancel", Text = Resources.CommonResource.Megse, EventName = "GondviseloElerhetosegCimHelper.modGondviseloCimCancel" });
            pm.Buttons.Add(new ModalButtonModel() { Name = "BtnElerhetosegOk", Text = Resources.CommonResource.Mentes, EventName = "GondviseloElerhetosegCimHelper.modGondviseloCimSave" });

            return PartialView(Constants.General.PopupView, pm);
        }

        #endregion Popups

        #region Export

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.AMImodul.ClaimValue)]
        public ActionResult TanuloExportBesorolashoz([FromUri] TanuloSearchModel data)
        {
            return TanuloLogic.TanuloExportBesorolashoz(data, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.AMImodul.ClaimValue)]
        public ActionResult TanulokLakcimmelExport([FromUri] TanuloSearchModel data)
        {
            return TanuloLogic.TanulokLakcimmelExport(data, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.AMImodul.ClaimValue)]
        public ActionResult TanulokTanugyiAdatiExport([FromUri] TanuloSearchModel model)
        {
            return TanuloLogic.ExportTanulokTanugyiAdatai(model);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.AMImodul.ClaimValue)]
        public ActionResult ExportTanulokTantargyaiEsPedagogusai([FromUri] TanuloSearchModel data)
        {
            return TanuloLogic.ExportTanulokTantargyaiEsPedagogusai(data, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.AMImodul.ClaimValue)]
        public ActionResult GondviselokElerhetosegeiExport([FromUri] TanuloSearchModel model)
        {
            return TanuloLogic.ExportGondviselokElerhetosegei(model, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.AMImodul.ClaimValue)]
        public ActionResult TanuloKirStatExport([FromUri] TanuloSearchModel data)
        {
            data.ForOktober = true;
            return TanuloLogic.TanuloKirStatExport(data);
        }

        [MvcRolePackageAuthorize(TanevEnum.AktEsKovTanev, KretaClaimPackages.AMImodul.ClaimValue)]
        public ActionResult TanuloKirStatTeljesExport([FromUri] TanuloSearchModel data)
        {
            return TanuloLogic.TanuloKirStatExport(data);
        }

        #endregion Export

        #region Belépési azonosító generálás

        [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsSzirIntezmeny.ClaimValue)]
        [MvcRolePackageAuthorize(KretaClaimPackages.AMImodul.ClaimValue)]
        public ActionResult AzonositoGeneralasPopup(bool isTanulo, bool isPasswordReset, List<int> tanuloIdList = null, bool generaltFileLetoltes = true, bool emailKuldes = true)
        {
            var hozzaferesModel = new HozzaferesGeneralasaModel
            {
                TanuloIdList = tanuloIdList,
                IsTanulo = isTanulo,
                GeneraltFileLetoltes = generaltFileLetoltes,
                EmailKuldes = emailKuldes,
                IsPasswordReset = isPasswordReset
            };

            if (isPasswordReset)
            {
                hozzaferesModel.ConfirmText = isTanulo ?
                    TanuloResource.JelszoAlaphelyzetbeAllitasaNovendekConfirm :
                    TanuloResource.JelszoAlaphelyzetbeAllitasaGondviseloConfirm;
                if (isTanulo)
                {
                    hozzaferesModel.TanulokEmailElerhetosegNelkul = TanuloLogic.GetTanulokEmailNelkulSzam(tanuloIdList);
                }
            }
            else
            {
                if (tanuloIdList != null)
                {
                    hozzaferesModel.ConfirmText = isTanulo ?
                        TanuloResource.BelepesiAzonositoGeneralasaKijeloltNovendekekConfirm :
                        TanuloResource.BelepesiAzonositoGeneralasaKijeloltNovendekekGondviseloinekConfirm;
                }
                else
                {
                    hozzaferesModel.ConfirmText = isTanulo ?
                        TanuloResource.BelepesiAzonositoGeneralasNovendekConfirm :
                        TanuloResource.BelepesiAzonositoGeneralasGondviseloConfirm;
                }
            }
            var model = new PopUpModel(hozzaferesModel, "HozzaferesGeneralasModal");
            model.AddBtn(model, "hozzaferes_generalas_Nem", "Nem", "KretaWindowHelper.destroyAllWindow");
            model.AddBtn(model, "hozzaferes_generalas_Igen", "Igen", "TanuloHelper.hozzaferesGeneralas");
            return PartialView(Constants.General.PopupView, model);
        }

        [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsSzirIntezmeny.ClaimValue)]
        [MvcRolePackageAuthorize(KretaClaimPackages.AMImodul.ClaimValue)]
        public JsonResult AzonositoGeneralas(bool isTanulo, bool fileLetoltesSzukseges, bool isPasswordReset, List<int> tanuloIdList = null)
        {
            var popupModel = TanuloLogic.AzonositoGeneralas(isTanulo, fileLetoltesSzukseges, isPasswordReset, tanuloIdList);
            return Json(popupModel);
        }

        public ActionResult SetGondviseloToBovitettPopup(List<int> tanuloIdList, bool isKijeloltTanulokGondviseloi)
        {
            if (isKijeloltTanulokGondviseloi && !TanuloLogic.ExistsGondviselo(tanuloIdList))
            {
                throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.AKijeloltNovendekeknekNincsGondiselojuk);
            }

            var hozzaferesModel = new GondviseloToBovitettModel
            {
                TanuloIdList = tanuloIdList,
                ConfirmText = isKijeloltTanulokGondviseloi ? TanuloResource.AKijeloltNovendekekOsszesGondviselojenekBelepeseBovitettLeszBiztosanFolytatja : TanuloResource.AKivalasztottGondviselonekBovitettJogosultsagLeszGeneralvaBiztosanFolytatja,
                EmailKuldes = true,
                GeneraltFileLetoltes = true
            };

            var model = new PopUpModel(hozzaferesModel, "GondviseloToBovitettModal");
            model.AddBtn(model, "hozzaferes_generalas_Nem", CommonResource.Nem, "TanuloGondviseloHelper.setGondviseloToBovitettCancel");
            model.AddBtn(model, "hozzaferes_generalas_Igen", CommonResource.Igen, isKijeloltTanulokGondviseloi ? "TanuloHelper.setGondviseloToBovitett" : "TanuloGondviseloHelper.setGondviseloToBovitett");
            return PartialView(Constants.General.PopupView, model);
        }

        [MvcRolePackageDenyAuthorize(TanevEnum.Mind, KretaClaimPackages.IsSzirIntezmeny.ClaimValue)]
        public JsonResult SetKijeloltTanulokGondviseloiToBovitett(bool emailKuldesSzukseges, bool fileLetoltesSzukseges, List<int> tanuloIdList)
        {
            var popupModel = TanuloLogic.SetKijeloltTanulokGondviseloiToBovitett(emailKuldesSzukseges, fileLetoltesSzukseges, tanuloIdList);
            return Json(popupModel);
        }

        [MvcRolePackageDenyAuthorize(TanevEnum.Mind, KretaClaimPackages.IsSzirIntezmeny.ClaimValue)]
        public JsonResult SetGondviseloToBovitett(bool emailKuldesSzukseges, bool fileLetoltesSzukseges, List<int> gondviseloIdList)
        {
            var popupModel = TanuloLogic.SetGondviseloToBovitett(emailKuldesSzukseges, fileLetoltesSzukseges, gondviseloIdList);
            return Json(popupModel);
        }

        public ActionResult DownloadEmailNelkuliTanulokJelszoResetEsetenXlsx(List<int> tanuloIds)
        {
            try
            {
                var nevmodel = new NyomtatvanyNevGeneralasModel { TanevID = ClaimData.AktivTanevID };
                var fileName = CommonExtensions.NevGeneralas(TanuloResource.TanulokEmailElerhetosegNelkulFileName, nevmodel);

                var fileContent = new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTanulokEmailNelkulJelszoResethezXlsx(tanuloIds);

                return new FileContentResult(fileContent, MediaTypeNames.Application.Octet)
                {
                    FileDownloadName = HttpUtility.UrlEncode($"{fileName}.xlsx", Encoding.UTF8),
                };
            }
            catch (Exception ex)
            {
                throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.SikertelenAllomanyLetoltes, ex);
            }
        }

        #endregion Belépési azonosító generálás

        #region Tantárgy felosztas mentés/módosítás/törlés

        public ActionResult LoadSablon(int tanuloId, int osztalyId, int sablonId)
        {
            return Json(AmiTanuloLogic.GetSablon(tanuloId, osztalyId, sablonId));
        }

        private string GetTantargyakSablonokkal()
        {
            var helper = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType());

            var ds = helper.GetTantargyakSablonokkal();

            var json = JsonConvert.SerializeObject(ds.Tables[0]);

            return json;
        }

        public ActionResult GetFrissTantargyakSablonokkal()
        {
            return Json(GetTantargyakSablonokkal());
        }

        #endregion Tantárgy felosztas mentés/módosítás/törlés
    }
}