using System.Collections.Generic;
using System.Net.Mime;
using System.Web.Http;
using System.Web.Mvc;
using Kreta.BusinessLogic.Security;
using Kreta.Core.FeatureToggle;
using Kreta.Core.FileService;
using Kreta.Enums.ManualEnums;
using Kreta.Web.Areas.Intezmeny.Logic;
using Kreta.Web.Areas.Intezmeny.Models;
using Kreta.Web.Security;
using TeremConstants = Kreta.Web.Constants.ViewNames.Terem;

namespace Kreta.Web.Areas.Intezmeny.Controllers
{
    [MvcRoleClaimsAuthorize(true)]
    [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)]
    [MvcRolePackageAuthorize(TanevEnum.Mind, KretaClaimPackages.Adminisztrator.ClaimValue)]
    public class TeremController : BaseTeremController
    {
        public TeremController(IFeatureContext featureContext, IFileService fileService)
            : base(featureContext, fileService)
        {
        }

        public ActionResult Index()
        {
            return View(Constants.ViewNames.Index, new TeremSearchModel());
        }

        public ActionResult OpenTeremPropertiesTab(int teremId)
        {
            return OpenTeremPropertiesTab(teremId, false, Constants.Controllers.Terem);
        }

        public ActionResult OpenTeremBaseProperties(int teremId)
        {
            return OpenTeremBaseProperties(teremId, false);
        }

        public ActionResult OpenTeremBerbeadasProperties(int? teremId)
        {
            var teremModel = TeremLogic.GetTeremBaseProperties(teremId);

            return PartialView(TeremConstants.Info_TeremBerbeadas_Tab, teremModel);
        }

        public ActionResult OpenTeremOrarendiOrai(int teremId)
        {
            return OpenTeremOrarendiOrai(teremId, false);
        }

        public ActionResult OpenTeremEszkozok(int teremId)
        {
            var teremModel = new TeremModel()
            {
                TeremId = teremId
            };

            return PartialView(TeremConstants.Info_TeremEszkozok_Tab, teremModel);
        }

        public ActionResult OpenTeremModifyAddTab(int? teremId, int? szervezetId)
        {
            return OpenTeremModifyAddTab(teremId, szervezetId, false);
        }

        public ActionResult OpenModPopup(List<TeremModModel> teremModelList, int? szervezetId)
        {
            return OpenModPopup(teremModelList, szervezetId, false);
        }

        public ActionResult ExportTermekAdatai([FromUri] TeremSearchModel data)
        {
            return TeremLogic.ExportTermekAdatai(data, ClaimData.IsSelectedTanev21_22OrLater);
        }

        public ActionResult GetTeremFile(int? teremId)
        {
            var fileData = TeremLogic.GetDocument(FileService, teremId.Value);

            return File(fileData.Content, MediaTypeNames.Application.Pdf, fileData.FajNev);
        }
    }
}