//(function () {

angular.module('MobileWebLogistics')
	.service('printMap', function () {
		var printMapServ = this;
		this.printComplete = function (result, $scope) {
			$scope.parcelLayer.setRenderer(new $scope.SimpleRenderer($scope.parcelSymbol));
			$scope.parcelLayer.id = $scope.parcelLayerName;
			var basemap = ($scope.map.getLayersVisibleAtScale())[0];
			basemap.setOpacity(1);
			$scope.labelLayer.setOpacity(1);
			pdfUrl = result.url;
			pdfTimeout = setTimeout(function () {
				if ($("#printBtn i").attr('class') == 'glyphicon glyphicon-save') {
					$("#printBtn i").removeClass('glyphicon glyphicon-save').addClass('glyphicon glyphicon-print');
					pdfUrl = "";
				}
			}, 420000); //milisec, 300000=5min, 420000=7min

			$("#printBtn i").removeClass('glyphicon glyphicon-cog gly-spin').addClass('glyphicon glyphicon-save');
			$("#printBtn").attr('disabled', false);
		}

		this.printError = function (error, $scope) {
			$scope.parcelLayer.setRenderer(new $scope.SimpleRenderer($scope.parcelSymbol));
			$scope.parcelLayer.id = $scope.parcelLayerName;
			if ($scope.pcount == 0) {
				$scope.printTask.execute($scope.params, $scope.printComplete, $scope.printError);
			}
			$scope.pcount = $scope.pcount + 1;
			if ($scope.pcount > 1) {
				$("#printBtn i").removeClass('glyphicon glyphicon-cog glyphicon-cog-animate').addClass('glyphicon glyphicon-print');
				$("#printBtn").attr('disabled', false);
				pdfUrl = "";
				var basemap = ($scope.map.getLayersVisibleAtScale())[0];
				basemap.setOpacity(1);
				$scope.labelLayer.setOpacity(1);
			}
		}

		this.execPrintMap = function ($scope) {
			if ($("#printBtn i").attr('class') == 'glyphicon glyphicon-save') {
				var downLink = pdfUrl;
				pdfUrl = "";
				window.open(downLink);
				self.focus();
				$("#printBtn i").removeClass('glyphicon glyphicon-save').addClass('glyphicon glyphicon-print');
				window.clearTimeout(pdfTimeout);
			} else {
				$("#printBtn i").removeClass('glyphicon glyphicon-print').addClass('glyphicon glyphicon-cog gly-spin');
				$("#printBtn").attr('disabled', true);
				var selectList = document.getElementById("printSize");
				var template = selectList.options[selectList.selectedIndex].value;
				var mapTitle = $("#mapTitle").val();
				if (mapTitle == "") {
					mapTitle = ' ';
				}
				$scope.params.map = $scope.map;
				var ptemp = new $scope.PrintTemplate();

				// If manualPrintScale == true, a user can define their map scale
				var userScale = $("#userMapScale").val() * 1;
				$scope.params.SpatialReference = new $scope.SpatialReference({
					wkid: 102100
				});
				ptemp.format = "PDF";
				ptemp.layout = template;

				var unit = 'Mile';
				if ($scope.isDynamicUnit == 'true') {
					if ($scope.map.getScale() < $scope.dynamicUnit[1] || (userScale < $scope.dynamicUnit[1] && userScale != 0)) {
						unit = 'Feet'
					}
				}

				// If a user adds a graphic with the draw tools, it is displayed in the legend as Override
				// Creating the legendLayer object and calling layer1 which is created from the map service prevents that
				ptemp.layoutOptions = {
					titleText: mapTitle,
					scalebarUnit: unit,
					legendLayers: [] // empty array means no legend               
				};
				if ($scope.showPrintLegend == 'true') {
					if ($scope.isFeatureService) {
						for (let i = 0; i < $scope.map.graphicsLayerIds.length; i++) {
							for (let j = 0; j < $scope.mapLayers.length; j++) {
								if ($scope.map.graphicsLayerIds[i] == $scope.mapLayers[j].name) {
									if ($scope.map.getLayer($scope.map.graphicsLayerIds[i]).visible) {
										var legendLayer = new $scope.legendLayer();
										legendLayer.layerId = $scope.map.graphicsLayerIds[i];
										ptemp.layoutOptions.legendLayers.push(legendLayer);
									}
								}
							}
						}
					} else {
						var legendLayer = new $scope.legendLayer();
						legendLayer.layerId = "map_layer1";
						ptemp.layoutOptions.legendLayers.push(legendLayer);
					}
				}

				ptemp.exportOptions = {
					dpi: 120
				};
				$scope.parcelLayer.setRenderer(new $scope.SimpleRenderer($scope.parcelSymbolNull));
				$scope.parcelLayer.id = $scope.parcelLyrName;
				ptemp.showAttribution = false;
				ptemp.showLabels = true;
				if (userScale > 0) {
					ptemp.outScale = userScale;
				}

				$scope.params.template = ptemp;
				var basemap = ($scope.map.getLayersVisibleAtScale())[0];
				if ($("#baseMapCheck").is(':checked')) {
					basemap.setOpacity($("#baseMapTransparency").val() / 100);
				} else {
					basemap.setOpacity(0);
				}
				if ($("#showLineLabels").is(':checked')) {
					$scope.labelLayer.setOpacity(1);
				} else {
					$scope.labelLayer.setOpacity(0);
				}

				// set outScale with preserveScale to get the TOPO basemap to show if map scale is too close to basemap maxScale
				if (($scope.map.getScale() - basemap.maxScale) < 1) {
					ptemp.outScale = basemap.maxScale + 1;
					ptemp.preserveScale = true;
				}

				if (!$scope.isFeatureService) {
					$scope.dmsLayer.opacity = $("#overlayTransparency").val() / 100;
				}
				var printurl = $scope.printer.url;
				$scope.printTask = new $scope.PrintTask(printurl);
				$scope.printTask.execute($scope.params, $scope.printComplete, $scope.printError);
			}
		}
	});

//})();