using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Security;
using Kreta.Core;
using Kreta.Enums;
using Kreta.Web.Areas.Hianyzas.Models;
using Kreta.Web.Areas.Tanulo.Models;
using Kreta.Web.Areas.TanuloErtekeles.Models.TanuloErtekeles;
using Kreta.Web.Helpers;
using Kreta.Web.Security;

namespace Kreta.Web.Areas.Tanulo.Controllers
{
    [MvcRoleClaimsAuthorize(true)]
    [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)]
    [MvcRolePackageAuthorize(KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Evfolyamfelelos.ClaimValue)]
    public class OsztalyTanuloiAdatokController : Controller
    {
        public ActionResult Index()
        {
            var model = new OsztalyTanuloiAdatokModel();

            if (ClaimData.FelhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.Naplo))
            {
                model.OsztalyCsoportId = new OsztalyCsoportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetOsztalyfonokElsonekMegtalaltOsztalya(ClaimData.FelhasznaloId);
            }

            return View("Index", model);
        }

        public ActionResult GetTanuloiAdatokPanelBarItemContent(int? tanuloId, int? osztalyCsoportId)
        {
            var model = new TanuloiAdatokModel
            {
                TanuloId = tanuloId,
                OsztalyCsoportId = osztalyCsoportId
            };
            return PartialView("~/Areas/Tanulo/Views/OsztalyTanuloiAdatok/TanuloiAdatok.cshtml", model);
        }

        public ActionResult GetTanuloErtekelesPanelBarItemContent(int? tanuloId, int osztalyCsoportId)
        {
            var model = new List<TanuloErtekelesByTanuloListModel>
            {
                new TanuloErtekelesByTanuloListModel
                {
                    NamePrefix = "TanuloErtekelesPanelBar",
                    IsJegyekAtlagaMegjelenik = true,
                    TanuloId = tanuloId,
                    GridUseToolBar = false,
                    OktatasiNevelesiFeladatId = new OsztalyCsoportHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).GetOsztalyCsoportOktatasNevelesiFeladatTipus(osztalyCsoportId)
                }
            };
            return PartialView("~/Areas/TanuloErtekeles/Views/TanuloErtekelesByTanulo/Index.cshtml", model);
        }

        public ActionResult GetFelmentesekPanelBarItemContent(int? tanuloId)
        {
            var model = new TanuloDetailModel
            {
                TanuloId = tanuloId ?? 0,
                GridNamePrefix = "FelmentesPanelBar",
                GridUseToolBar = false
            };
            return PartialView("~/Areas/Tanulo/Views/Tanulo/Info_TantargyiMentesseg_Tab.cshtml", model);
        }

        public ActionResult GetHianyzasokPanelBarItemContent(int? tanuloId)
        {
            var model = new MulasztasSearchModel
            {
                TanuloId = tanuloId,
                IsCustomForm = true,
                CustomFormName = "OsztalyTanuloiAdatokForm",
                GridUseToolBar = false,
                ChildGridHasDelete = false,
            };
            return PartialView("~/Areas/Hianyzas/Views/Shared/Mulasztasok_TanuloNezet_Tab.cshtml", model);
        }

        public ActionResult GetIgazolasokPanelBarItemContent(int? tanuloId)
        {
            var model = new TanuloDetailModel
            {
                TanuloId = tanuloId ?? 0,
                GridNamePrefix = "IgazolasPanelBar",
                GridUseToolBar = false
            };
            return PartialView("~/Areas/Tanulo/Views/Tanulo/Info_Igazolasok_Tab.cshtml", model);
        }

        public ActionResult GetFeljegyzesekPanelBarItemContent(int? tanuloId)
        {
            var tanuloiFeljegyzesekItemModelList = new List<TanuloiFeljegyzesekItemModel>();
            if (tanuloId.IsEntityId())
            {
                var helper = new FeljegyzesHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());

                var coList = helper.GetTanuloiFeljegyzesekItemList(tanuloId.Value);
                tanuloiFeljegyzesekItemModelList.AddRange(coList.Select(co => new TanuloiFeljegyzesekItemModel(co)));
            }

            var model = new TanuloiFeljegyzesekModel
            {
                TanuloId = tanuloId,
                TanuloiFeljegyzesekItemList = tanuloiFeljegyzesekItemModelList.OrderBy(x => x.Datum).ToList()
            };

            return PartialView("TanuloiFeljegyzesek", model);
        }

        public ActionResult GetFeljegyzesekHaviPanelBarItemContent(int? tanuloId, int? osztalyCsoportId)
        {
            var model = new TanuloDetailModel
            {
                TanuloId = tanuloId ?? 0,
                OsztalycsoportId = osztalyCsoportId ?? 0,
                GridNamePrefix = "FeljegyzesHaviPanelBar",
                GridUseToolBar = false
            };
            return PartialView("~/Areas/Tanulo/Views/Tanulo/Info_FeljegyzesHavi_Tab.cshtml", model);
        }

        public ActionResult GetDiakOlimpiaPanelBarItemContent(int? tanuloId, int? osztalyCsoportId)
        {
            return PartialView("~/Areas/Tanulo/Views/Tanulo/Info_DiakOlimpia.cshtml", tanuloId ?? 0);
        }
    }
}