using System;
using System.Data;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.ModelBinding;
using Kendo.Mvc.UI;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Security;
using Kreta.Enums;
using Kreta.Resources;
using Kreta.Web.Areas.Tanulo.Models;
using Kreta.Web.Helpers;
using Kreta.Web.Helpers.Error;
using Kreta.Web.Helpers.Grid;
using Kreta.Web.Security;
using Newtonsoft.Json;

namespace Kreta.Web.Areas.Tanulo.ApiControllers
{
    [ApiRoleClaimsAuthorize(true)]
    [ApiRolePackageAuthorize(KretaClaimPackages.CsoportVezeto.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue)]
    public class CsoportTanuloiApiController : ApiController
    {
        public DataSourceResult GetCsoportTanuloiGrid(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
        {
            var model = JsonConvert.DeserializeObject<CsoportTanuloiSearchModel>(data);

            if (!model.OsztalyCsoport.HasValue)
            {
                return new DataSourceResult();
            }

            Enum.TryParse(new OsztalyCsoportHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).GetOsztalyCsoportFeladatKategoria(model.OsztalyCsoport.Value).ToString(), out OktNevelesiKategoriaEnum osztalycsoportKategoria);
            model.FeladatKategoriaId = (int)osztalycsoportKategoria;

            var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization));
            if (!authorization.IsValidCsoport(model.OsztalyCsoport.Value))
            {
                throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz);
            }

            bool? tankozelezett = null;
            if (model.Tankotelezett.HasValue)
            {
                tankozelezett = model.Tankotelezett.Value == 1;
            }

            var helper = new TanuloHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType())
            {
                GridParameters = Converter.GridParameter(request)
            };

            DataSet tanulok = helper.GetTanuloDataSetByOsztalyCsoportId(
                model.OsztalyCsoport.Value,
                model.FeladatKategoriaId,
                model.Nev,
                model.AnyjaSzuletesiNev,
                model.SzuletesiHely,
                model.SzuletesiIdoTol,
                model.SzuletesiIdoIg,
                model.OktatasiAzonosito,
                tankozelezett,
                model.Tanterv,
                model.FeladatEllatasiHelyId);

            return tanulok.ToDataSourceResult();
        }
    }
}