(function(){

angular
  .module('iz.core')
  .factory('VeranstaltungenService', VeranstaltungenService);

VeranstaltungenService.$inject = ['$http', 'Logger', '$q', '$location'];
function VeranstaltungenService($http, Logger, $q, $location) {
  return {
	search: search,
	get: get,
	getModuleContentboxData: getModuleContentboxData,
	buchen: buchen,
	checkZugangscode: checkZugangscode,
	downloadDokument:downloadDokument,
	checkRabattCode: checkRabattCode
  };

  /**
	 * Laden aller Veranstaltungen
	 */
  function search(index, count, search, filter, sort, archiv) {
	var request = {
	  method: 'GET',
	  url: '/veranstaltungen/api/search',
	  params: {'index': index, 'count': count, 'filter': search, 'sort': sort, 'archiv': archiv}
	};
	if(filter) {
	  for (var prop in filter) {
		if (filter.hasOwnProperty(prop)) { 
		  //alert("prop: " + prop + " value: " + filter[prop])
		  request.params['filter-'+prop] = filter[prop];
		}
	  }
	}
	return $http(request).then(success);
	function success(response) {
	  return response.data;
	}
  }
  function get(code) {
	var request = {
	  method: 'GET',
	  url: '/veranstaltungen/api/' + code,
	  params: {'preview': $location.search().preview}
	};

	var defer = $q.defer();

	$http(request).then(success,error);

	function success(response) {
	  response.data.startDate = new Date(response.data.startDate);
	  response.data.endDate = new Date(response.data.endDate);
	  return defer.resolve(response.data);
	}
	function error(response){
	  return defer.reject(response);
	}
	return defer.promise;
  }
  function getModuleContentboxData(id, moduleId){
	var request = {
	  method: 'GET',
	  url: '/api/heuer/veranstaltungen/'+id+'/modules/'+moduleId+'/contentboxes'
	};

	return $http(request).then(success);

	function success(response){
	  return response.data;
	}
  }

  function buchen(buchung,code) {
	var request = {
	  method: 'POST',
	  url: '/veranstaltungen/api/' + code + '/buchen',
	  data: buchung
	};

	return $http(request).then(success);

	function success(response) {
	  return response.data;
	}
  }
  
  function checkRabattCode(buchung, rabattCode, veranstaltungCode) {
	delete buchung.rabattcode;
  	var request = {
	  method: 'POST',
	  url: '/api/heuer/veranstaltungen/check/rabatcode/'+encodeURIComponent(rabattCode)+'/'+veranstaltungCode,
	  data: buchung
	};

	return $http(request).then(success);

	function success(response) {
	  return response.data;
	}
  }

  function checkZugangscode(zugangscode,code){
	var request = {
	  method: 'GET',
	  url: '/veranstaltungen/api/' + code + '/check-dokument-zugangscode?zugangscode=' + encodeURIComponent(zugangscode)
	};

	return $http(request).then(success);

	function success(response) {
	  return response.data;
	}
  }
  function downloadDokument(zugangscode,code,dokumentId){

	var request = {
	  method: 'GET',
	  url: '/api/heuer/cdn/veranstaltung/'+code+'/dokument/'+dokumentId,
	  //data: {'zugangscode': zugangscode}
	};

	/*
	var xmlhttp = new XMLHttpRequest();   // new HttpRequest instance 
	xmlhttp.open("POST", '/api/heuer/cdn/veranstaltung/'+code+'/dokument/'+dokumentId);
	xmlhttp.setRequestHeader("Content-Type", "application/json");
	xmlhttp.send(JSON.stringify({zugangscode:zugangscode}));
	*/
	

	return $http(request).then(success);

	function success(response) {
	  return response.data;
	}

  }
}
  
  
}());
