using System;
using System.Data;
using System.Text.RegularExpressions;
using System.Web.Http;
using System.Web.Http.ModelBinding;
using Kendo.Mvc.UI;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Security;
using Kreta.Web.Areas.TanuloErtekeles.Models;
using Kreta.Web.Helpers;
using Kreta.Web.Helpers.Grid;
using Kreta.Web.Security;
using Newtonsoft.Json;

namespace Kreta.Web.Areas.TanuloErtekeles.ApiControllers
{
    [ApiRoleClaimsAuthorize(true)]
    [ApiRolePackageAuthorize(KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Tanar.ClaimValue)]
    public class DolgozatokApiController : ApiController
    {
        public DataSourceResult GetDolgozatokAtlagaGrid(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
        {
            var model = JsonConvert.DeserializeObject<DolgozatokAtlagaSearchModel>(data);
            model.TanarId = ClaimData.FelhasznaloId;
            model.SzuperOsztalyfonok = Convert.ToInt32(AuthorizeHelper.CheckPackageAccess(new[] { KretaClaimPackages.SzuperOsztalyfonok.ClaimValue }));
            model.Datum = DateTime.Now;

            var searchCo = model.ConvertToCo();

            var helper = new TanuloErtekelesHelper(ConnectionTypeExtensions.GetSessionConnectionType());
            helper.GridParameters = Converter.GridParameter(request);

            Regex starterRegex = new Regex($"^{nameof(DolgozatokAtlagaGridModel.IrtakDolgozatotArany)} ");
            Regex innerRegex = new Regex($",{nameof(DolgozatokAtlagaGridModel.IrtakDolgozatotArany)} ");

            helper.GridParameters.OrderBy = starterRegex.Replace(helper.GridParameters.OrderBy, $"{nameof(DolgozatokAtlagaGridModel.IrtakDolgozatot)} ");
            helper.GridParameters.OrderBy = innerRegex.Replace(helper.GridParameters.OrderBy, $",{nameof(DolgozatokAtlagaGridModel.IrtakDolgozatot)} ");

            DataSet dataSet = helper.GetTanuloErtekelesDataSetForGrid(searchCo);

            return dataSet.ToDataSourceResult();
        }

        public DataSourceResult GetDolgozatReszletekGrid(int osztalyCsoportId, int tantargyId, string ertekelesTemaja, string datum, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
        {
            var gridParameters = Converter.GridParameter(request);

            var helper = new TanuloErtekelesHelper(ConnectionTypeExtensions.GetSessionConnectionType());
            helper.GridParameters = gridParameters;
            var dataSet = helper.GetDolgozatReszletekDataSetForGrid(osztalyCsoportId, tantargyId, ertekelesTemaja, DateTime.Parse(datum));

            return dataSet.ToDataSourceResult();
        }
    }
}