﻿var sSchedule_dataSources_eventDataSource = function () {
	//#region ------------------- ' Variables '-----------------------

	var dataStore = new sSchedule_dataSources();
	var models = new sSchedule_common_dataModels();
	var common = new Sschedule_commonFunctions();
	var serviceRootUrl = common.getServiceRootUrl();

	//#endregion ------------------- ' Variables '-----------------------

	function getDsByName(name, params, callback, parameterMapFunc, eventsCount, readCallback) {
	    var dataSource = null;
		switch (name) {   
			case "EventDs":
				var dataModel = "Event";
				var apiName = "SchedulingEvents";
				var readEntity = "GetAllEvents";
				var updateEntity = "PostUnpostEvent";
				var destroyEntity = "DeleteEvent";

				var model = models.getModel(dataModel);

				crudServiceBaseUrl = serviceRootUrl + apiName + "/";
				dataSource = new kendo.data.DataSource({
					transport: {
						read: dataStore.readDs(crudServiceBaseUrl, readEntity, readCallback),
						update: dataStore.updateDs(crudServiceBaseUrl, updateEntity, callback),
						destroy: dataStore.destroyDs(crudServiceBaseUrl, destroyEntity, callback),
						parameterMap: parameterMapFunc
					},
					error: dataStore.errorDs(),
					schema: {
						type: "json",
						model: model,
						total: function (response) {
							if (response.length > 0) {
								return response[0].TotalEventsCount;
							} else
								return 0;
						},
					},
					pageSize: 20,
					serverPaging: true,
					serverFiltering: true
				});
				break;

			case "EventNamesDs":
				var dataModel = "Event";
				var apiName = "SchedulingEvents";
				var readEntity = "GetAllEventNames";

				var model = models.getModel(dataModel);

				crudServiceBaseUrl = serviceRootUrl + apiName + "/";
				dataSource = new kendo.data.DataSource({
					transport: {
						read: dataStore.readDs(crudServiceBaseUrl, readEntity),
						parameterMap: parameterMapFunc
					},
					error: dataStore.errorDs(),
					schema: {
						type: "json",
						model: model
					},

				});
				break;

			case "EventNamesTreeViewDs":
				var dataModel = "Event";
				var apiName = "SchedulingEvents";
				//var readEntity = "GetAllEventNames";
				var readEntity = "GetAllEventNamesWithCustomEvent";
				 
				

				//var model = models.getModel(dataModel);

				crudServiceBaseUrl = serviceRootUrl + apiName + "/";
				dataSource = new kendo.data.HierarchicalDataSource({
					transport: {
						read: dataStore.readDs(crudServiceBaseUrl, readEntity,readCallback),
						parameterMap: parameterMapFunc
					},
					error: dataStore.errorDs(),
					schema: {
						type: "json",
						model: {
							id: "EventID",
							hasChildrend: false
						}
					},

				});
				break;
		    case "ArchivedEventNamesListDs":
		        var dataModel = "Event";
		        var apiName = "SchedulingEvents";
		        var readEntity = "GetAllArchivedEventNames";



		        //var model = models.getModel(dataModel);

		        crudServiceBaseUrl = serviceRootUrl + apiName + "/";
		        dataSource = new kendo.data.HierarchicalDataSource({
		            transport: {
		                read: dataStore.readDs(crudServiceBaseUrl, readEntity, readCallback),
		                parameterMap: parameterMapFunc
		            },
		            error: dataStore.errorDs(),
		            schema: {
		                type: "json",
		                model: {
		                    id: "EventID",
		                    hasChildrend: false
		                }
		            },

		        });
		        break;

		    case "ArchivedEventNamesDs":
		        var dataModel = "Event";
		        var apiName = "SchedulingEvents";
		        var readEntity = "GetAllArchivedEvents";
		        var destroyEntity = "DeleteEvent";

		        var model = models.getModel(dataModel);

		        crudServiceBaseUrl = serviceRootUrl + apiName + "/";
		        dataSource = new kendo.data.DataSource({
		            transport: {
		                read: dataStore.readDs(crudServiceBaseUrl, readEntity,readCallback),
		                destroy: dataStore.destroyDs(crudServiceBaseUrl, destroyEntity, callback),
		                parameterMap: parameterMapFunc
		            },
		            error: dataStore.errorDs(),
		            schema: {
		                type: "json",
		                model: model,
		                total: function (response) {
		                    if (response.length > 0) {
		                        return response[0].TotalEventsCount;
		                    } else
		                        return 0;
		                },
		            },
		            page: 1,
                    pageSize: 20,
					serverPaging: true,
					serverFiltering: true
		        });
		        break;
		}
		return dataSource;
	}

	return {
		getDsByName: getDsByName
	};
}