﻿var sSchedule_dataSources_fieldsDataSource = function () {

	//#region ---------------------- ' Variables ' ---------------------//

	var dataSource = new sSchedule_dataSources();
	var models = new sSchedule_common_dataModels();
	var common = new Sschedule_commonFunctions();
	var serviceRootUrl = common.getServiceRootUrl();

	//#region ---------------------- ' Variables '---------------------//

	function getDsByName(name, parameterMapFunc, successCallback, readCallback) {
		var fieldDataSource = null;
		var dataModel = null;
		var apiName = null;
		var readEntity = null;
		var crudServiceUrl = null;
		var updateEntity = null;
		var createEntity = null;
		var destroyEntity = null;

		switch (name) {
			case "FieldsDs":
				{
					dataModel = models.getModel("Field");
					apiName = "Fields";
					readEntity = "GetAllActiveFieldsByLocationWithStatus";
					updateEntity = "UpdateField";
					createEntity = "AddField";
					destroyEntity = "DeleteField";
					crudServiceUrl = serviceRootUrl + apiName + "/";
					fieldDataSource = new kendo.data.DataSource({
						transport:
							{
								read: dataSource.readDs(crudServiceUrl, readEntity, successCallback),
								update: dataSource.updateDs(crudServiceUrl, updateEntity),
								create: dataSource.createDs(crudServiceUrl, createEntity),
								destroy: dataSource.destroyDs(crudServiceUrl, destroyEntity),
								parameterMap: parameterMapFunc
							},
						error: dataSource.errorDs(),
						batch: true,
						schema: {
							type: "json",
							model: dataModel
						}
					});
				}
				break;
			case "AllFieldsDataSourceForEdit":
				{
					dataModel = models.getModel("Field");
					apiName = "Fields";
					readEntity = "GetAllFieldsBySiteIdWithHomeTeams";
					updateEntity = "ManageFields";
					createEntity = "ManageFields";
					destroyEntity = "ManageDeletedFields";

					crudServiceUrl = serviceRootUrl + apiName + "/";
					fieldDataSource = new kendo.data.DataSource({
						transport:
							{
								read: dataSource.readDs(crudServiceUrl, readEntity, readCallback),
								update: dataSource.updateDs(crudServiceUrl, updateEntity, successCallback),
								create: dataSource.createDs(crudServiceUrl, createEntity, successCallback),
								destroy: dataSource.createDs(crudServiceUrl, destroyEntity),
								parameterMap: parameterMapFunc
							},
						error: dataSource.errorDs(),
						batch: true,
						schema: {
							type: "json",
							model: dataModel
						}
					});
				}
				break;

			case "AllFieldsDs":
				{
					dataModel = models.getModel("Field");
					apiName = "Fields";
					readEntity = "GetAllFieldsBySiteId";
					updateEntity = "ManageFields";
					createEntity = "ManageFields";
					destroyEntity = "ManageDeletedFields";

					crudServiceUrl = serviceRootUrl + apiName + "/";
					fieldDataSource = new kendo.data.DataSource({
						transport:
							{
								read: dataSource.readDs(crudServiceUrl, readEntity, successCallback),
								update: dataSource.updateDs(crudServiceUrl, updateEntity),
								create: dataSource.createDs(crudServiceUrl, createEntity),
								destroy: dataSource.createDs(crudServiceUrl, destroyEntity),
								parameterMap: parameterMapFunc
							},
						error: dataSource.errorDs(),
						batch: true,
						schema: {
							model: {
								id: "FieldID",
								fields: {
									Name: { type: "string" },
									TeamDetails:{type:"Object"}
								}
							}
						}
					});
				}
				break;
			case "PortalGroupsFieldsDs":
				{
					dataModel = models.getModel("Field");
					apiName = "Fields";
					readEntity = "GetAllFieldsByPortalGroups";
					
					crudServiceUrl = serviceRootUrl + apiName + "/";
					fieldDataSource = new kendo.data.DataSource({
						transport:
							{
								read: dataSource.readDs(crudServiceUrl, readEntity, successCallback),
								parameterMap: parameterMapFunc
							},
						error: dataSource.errorDs(),
						batch: true,
						schema: {
							model: {
								id: "FieldID",
								fields: {
									Name: { type: "string" }
								}
							}
						}
					});
				}
				break;
		}

		return fieldDataSource;

	}

	return {
		getDsByName: getDsByName
	};
}