//(function () {

angular.module('MobileWebLogistics')
	.service('localCustom', function () {

		var self = this;
		//====== modal images
		this.getImages = function ($scope, $modal, wlFactory, imageLink, i) {
			var isParcelImg = true;
			var parcelImgUrl = '';
			if (i == 1) {
				$scope.parcelImages = [];
				$scope.parcelImages.push(imageLink + "_" + i); //add first image
				parcelImgUrl = $scope.parcelUrl + imageLink + "_" + i + $scope.JPG; //https://s3.amazonaws.com/timmons-weblogistics/Gloucester/Parcels/0662-52-0237_1.jpg

			} else {
				parcelImgUrl = $scope.parcelUrl + imageLink + "_" + i + $scope.JPG; //https://s3.amazonaws.com/timmons-weblogistics/Gloucester/Parcels/0662-52-0237_1.jpg
			}
			wlFactory.imageExists($scope, parcelImgUrl, function (exists) {

				isParcelImg = exists;
				if (isParcelImg == true) {
					if (i > 1 && $scope.parcelImages.indexOf(imageLink + "_" + i) == -1) { //if it's for 2nd or more image and is not in the array      		
						$scope.parcelImages.push(imageLink + "_" + i);
					}
					i++;
					parcelImgUrl = $scope.parcelUrl + imageLink + "_" + i + $scope.JPG;
					self.getImages($scope, $modal, wlFactory, imageLink, i) //check for next image
				} else {
					if ($scope.openImageDelay == 0) {
						setTimeout(function () {
							self.openImage($scope, $modal);
						}, 400);
					}
					setTimeout(function () {
						$scope.openImageDelay = 0;
					}, 1000);
				}
			});
		}

		this.openImage = function ($scope, $modal, event) {
			if ($scope.openImageDelay == 0) {
				$scope.openImageDelay = 1;
				var modalInstance = $modal.open({
					templateUrl: 'templates/imageModal.html',
					controller: 'ImageController',
					scope: $scope
				});
			}
		}
		//======endof modal images
		//======custom create report
		var pdf, parcelImg, isParcelImg, parcelMap, isParcelMap, imgwidth1, imgwidth2, imgwidth3;
		var imgheight1, imgheight2, imgheight3;
		var availSpace = 270;
		var defaultTop = 28;
		var page = 1;
		this.createPDF = function ($scope, parcelImgUrl) {
			parcelImgUrl = parcelImgUrl.replace('_1.jpg', '');
			parcelImg = new Image();
			parcelImg.setAttribute('crossOrigin', 'anonymous');
			var parcelImgUrl1 = parcelImgUrl.toString();
			parcelImg.onload = function () {
				isParcelImg = true;
			};
			parcelImg.onerror = function () {
				isParcelImg = false;
			};
			parcelImg.src = parcelImgUrl;
			parcelImg.src = parcelImgUrl1 + "?";

			setTimeout(function () {
				var img1;
				pdf = new jsPDF('portrait', 'mm', 'letter', true);
				var margins = {
					top: 15,
					bottom: 60,
					//left: $scope.headerH + 5,
					left: 20,
					width: 520
				};
				//adding report
				self.addTable1($scope);
			}, 500);
		}

		this.addHeader = function ($scope) {
			pdf.addImage($scope.headerData, 'PNG', 15, 8, 71.7 * 0.861, 19 * 0.861);
			pdf.setFont("arial");
			pdf.setTextColor(0, 0, 0);
			pdf.setFontSize(10);
			pdf.textEx($scope.pdfHeaderTxt1, 193, 18, 'right', 'middle');
			pdf.textEx($scope.pdfHeaderTxt2, 193, 23, 'right', 'middle');
			pdf.setLineWidth(0.4);
			pdf.setDrawColor(0, 0, 0);
			pdf.line(37, 25, 198, 25);
		}
		this.addFooter = function (pidtxt, pid, page) {
			pdf.setLineWidth(0.4);
			pdf.setDrawColor(220, 220, 220);
			pdf.line(15, 260, 198, 260);
			pdf.setFont("arial");
			pdf.setTextColor(100, 100, 100);
			pdf.setFontSize(10);
			if (pidtxt.length > 0) {
				pdf.text(16, 265, pidtxt + pid);
			}
			pdf.text(183, 265, page + ' | Page');
		}
		this.addImages = function ($scope) {
			self.addFooter($scope.parcelpdfID[0], $scope.selectedParcel[$scope.parcelpdfID[1]], page);
			page += 1;
			if ($scope.propertyImg == 'false') {
				isParcelImg = false;
			}
			if (isParcelImg) {
				var pageHeight = pdf.internal.pageSize.height;
				var y = 400 // Height position of new content
				pdf.addPage();
				self.addHeader($scope);
				y = 40 // Restart height position
				pdf.addImage(parcelImg, 'JPEG', 30, 30, 150, 100, 'house');
				self.addFooter($scope.parcelpdfID[0], $scope.selectedParcel[$scope.parcelpdfID[1]], page);
			}
			pdf.save('Parcel_report.pdf');
			$("#pdfPreloaderContainer").removeClass("active");
			page = 1;
		}
		var tblNum = 1;
		this.addTable1 = function ($scope) {
			self.addHeader($scope);
			pdf.setFont("arial");
			pdf.setTextColor(80, 80, 80);
			pdf.setFontSize(16);
			pdf.text(17, 42, $("#reportAddress").text());

			html2canvas($("#reportBody > #reportTbl_1"), {
				onrendered: function (canvas1) {
					var imgData1 = canvas1.toDataURL('image/png');
					imgwidth1 = canvas1.width * 0.227; // This will print out the width.
					imgheight1 = canvas1.height * 0.23;
					pdf.addImage(imgData1, 'PNG', 16, 45, imgwidth1, imgheight1);
					nextTblLoc = imgheight1 + 45;
					tblNum = 2;
					self.addAdditionalTable($scope);
				}
			});
		}

		this.addAdditionalTable = function ($scope) {
			html2canvas($("#reportBody > #reportTbl_" + tblNum), {
				onrendered: function (canvas2) {
					var imgData2 = canvas2.toDataURL('image/png');
					imgwidth2 = canvas2.width * 0.227; // This will print out the width.
					imgheight2 = canvas2.height * 0.23;
					if (nextTblLoc + imgheight2 > availSpace) {
						self.addFooter($scope.parcelpdfID[0], $scope.selectedParcel[$scope.parcelpdfID[1]], page);
						page += 1;
						pdf.addPage();
						self.addHeader($scope);
						nextTblLoc = defaultTop;
						pdf.addImage(imgData2, 'PNG', 16, nextTblLoc, imgwidth2, imgheight2);
						nextTblLoc += imgheight2;
					} else {
						pdf.addImage(imgData2, 'PNG', 16, nextTblLoc, imgwidth2, imgheight2);
						nextTblLoc = nextTblLoc + imgheight2;
					}
					tblNum += 1;
					if (tblNum > $scope.numOfTable) {
						self.addImages($scope);
					} else {
						self.addAdditionalTable($scope);
					}
				}
			});
		}
		//======end of custom create report

		//======findRelatedRecords
		this.findRelatedRecords = function ($scope, OBJECTID) {
			var relatedTblQuery = new $scope.RelationshipQuery();
			relatedTblQuery.outFields = ["*"];
			relatedTblQuery.objectIds = [OBJECTID];

			relatedTblQuery.relationshipId = '0'; //ImprovementWeb - ImprType,UseDesc,BldgType,YrBuilt,FinSize,LastUpdD
			$scope.selectedParcelT0 = [];
			$scope.parcelLayer.queryRelatedFeatures(relatedTblQuery, function (relatedRecords) {
				if (relatedRecords[OBJECTID]) {
					$scope.relatedResult0 = relatedRecords[OBJECTID].features;
					for (var i = 0; i < $scope.relatedResult0.length; i++) { //alert($scope.relatedResult0[i].attributes['OBJECTID']);
						for (var key in $scope.relatedResult0[i].attributes) {
							var thisKey = $scope.relatedResult0[i].attributes[key.toString()]; //alert(key); alert(thisKey); //key=fieldname, thisKey=value														
							$scope.relatedResult0[i].attributes[key.toString()] = $scope.formatParcelData(key, thisKey, $scope.relatedResult0[i].attributes[key.toString()]);
						}
						$scope.selectedParcelT0.push($scope.relatedResult0[i].attributes);
					}
				}
			});
		};
		//==========end of findRelatedRecords
		this.addCustomBasemap = function ($scope) {
			//==========
			var vgin2002 = new esri.dijit.BasemapLayer({ //type:"WebTiledLayer",  
				url: "https://vginmaps.vdem.virginia.gov/arcgis/rest/services/VBMP_Imagery/VBMP2002_WGS/MapServer" //,
			});
			var vgin2002Image = new esri.dijit.Basemap({
				layers: [vgin2002],
				title: "2002 VGIN Imagery",
				thumbnailUrl: "img/vgin2002.PNG"
			});
			$scope.basemapGallery.add(vgin2002Image);
			//==========
			var vgin2009 = new esri.dijit.BasemapLayer({ //type:"WebTiledLayer",  
				url: "https://vginmaps.vdem.virginia.gov/arcgis/rest/services/VBMP_Imagery/VBMP2009_WGS/MapServer" //,
			});
			var vgin2009Image = new esri.dijit.Basemap({
				layers: [vgin2009],
				title: "2009 VGIN Imagery",
				thumbnailUrl: "img/vgin2009.PNG"
			});
			$scope.basemapGallery.add(vgin2009Image);

			var vgin2017 = new esri.dijit.BasemapLayer({ //type:"WebTiledLayer",  
				url: "https://vginmaps.vdem.virginia.gov/arcgis/rest/services/VBMP_Imagery/VBMP2017_WGS/MapServer" //,
			});
			var vgin2017Image = new esri.dijit.Basemap({
				layers: [vgin2017],
				title: "2017 VGIN Imagery",
				thumbnailUrl: "img/vgin2017.PNG"
			});
			$scope.basemapGallery.add(vgin2017Image);

		}
	});