using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Formatting;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Syncfusion.EJ2;
using BWPMModels;
using System.Collections;
using Syncfusion.EJ2.Base;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using System.Reflection;
using App.Models;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Authorization;

namespace App.Controllers
{
    public partial class @TablenameController : Controller
    {
        private readonly UserManager<AppUser> _userManager;
        private readonly SignInManager<AppUser> _signInManager;

        public UserController(UserManager<AppUser> userManager, SignInManager<AppUser> signInManager)
        {
            this._userManager = userManager;
            this._signInManager = signInManager;
        }
        [Authorize]
        public IActionResult Index()
        {
            return View();
        }

        [HttpPost]

        public IActionResult UrlDatasource([FromBody] DataManagerRequest dm)
        {
            Helper.HttpClientHelper httpcli = new Helper.HttpClientHelper();
            httpcli.CallService("@Tablename", "", "GET", null);
            if (httpcli.Results.resultstatus != true)
            {
                return View();

            }
            List<BWPMModels.@Tablename> @Tablenames = JsonConvert.DeserializeObject<List<BWPMModels.@Tablename>>(httpcli.Results.daten);

            ViewBag.DataSource = @Tablenames;
            IEnumerable DataSource = @Tablenames;


            DataOperations operation = new DataOperations();
            if (dm.Search != null && dm.Search.Count > 0)
            {
                DataSource = operation.PerformSearching(DataSource, dm.Search);  //Search 
            }
            if (dm.Sorted != null && dm.Sorted.Count > 0) //Sorting 
            {
                DataSource = operation.PerformSorting(DataSource, dm.Sorted);
            }
            if (dm.Where != null && dm.Where.Count > 0)
            {
                DataSource = operation.PerformFiltering(DataSource, dm.Where, dm.Where[0].Operator);     //Filtering 
            }
            int count = DataSource.Cast<@Tablename>().Count();
            if (dm.Skip != 0)
            {
                DataSource = operation.PerformSkip(DataSource, dm.Skip);   //Paging 
            }
            if (dm.Take != 0)
            {
                DataSource = operation.PerformTake(DataSource, dm.Take);
            }
            return dm.RequiresCounts ? Json(new { result = DataSource, count = count }) : Json(DataSource);
        }
        public ActionResult Update([FromBody] ICRUDModel<BWPMModels.@Tablename> value)
        {
            Helper.HttpClientHelper httpcli = new Helper.HttpClientHelper();
            BWPMModels.@Tablename u = new BWPMModels.@Tablename();
            u = value.value;
            httpcli.CallService("@Tablename", u.ID.ToString(), "PUT", value.value);
            if (httpcli.Results.resultstatuscode != "OK")
            {
                return View();
            }
            return Json(value.value);
        }


        public ActionResult Insert([FromBody] ICRUDModel<BWPMModels.@Tablename> value)
        {
            Helper.HttpClientHelper httpcli = new Helper.HttpClientHelper();
            BWPMModels.@Tablename u = new BWPMModels.@Tablename();
            u = value.value;
            u.mutiert_am = DateTime.Now;
            try
            {
                u.mutierer = Convert.ToInt32(_userManager.GetUserId(HttpContext.User));
            }
            catch
            {
                u.mutierer = 1;
            }
            u.erstellt_am = DateTime.Now;

            httpcli.CallService("@Tablename", "", "POST", u);
            if (httpcli.Results.resultstatuscode != "OK")
            {
                return View();
            }
            return Json(value.value);
        }

        public ActionResult Remove([FromBody] CRUDModel<BWPMModels.@Tablename> value)
        {
            Helper.HttpClientHelper httpcli = new Helper.HttpClientHelper();
            BWPMModels.@Tablename u = new BWPMModels.@Tablename();
            u.mutiert_am = DateTime.Now;
            try
            {
                u.mutierer = Convert.ToInt32(_userManager.GetUserId(HttpContext.User));
            }
            catch
            {
                u.mutierer = 1;
            }
            u.erstellt_am = DateTime.Now;
            httpcli.CallService("@Tablename", value.Key.ToString(), "DELETE", u);
            if (httpcli.Results.resultstatuscode != "OK")
            {
                return View();
            }
            return Json(value);
        }




    }
}
