angular.module("histogramApp", ["ui.bootstrap", "ui.utils",
		"histogramEvents", "nagiosDecorations", "nagiosTime"])

	// Statistics breakdown list
	.constant("statisticsBreakdown", [
		{ value: "monthly",		label: "Month" },
		{ value: "dayofmonth",	label: "Day of the Month" },
		{ value: "dayofweek",	label: "Day of the Week" },
		{ value: "hourly",		label: "Hour of the Day" }
	])

	.config(function($locationProvider) {
		$locationProvider.html5Mode({
			enabled: true,
			requireBase: false
		})
	})

	.controller("histogramCtrl", function($scope, $location, $modal) {

		// Parameters found in the URL
		$scope.search = $location.search();

		// URL parameters
		$scope.params = {
			cgiurl: $scope.search.cgiurl ? $scope.search.cgiurl : 
					$location.absUrl().replace(/histogram\.html.*$/, "cgi-bin/"),
			reporttype: $scope.search.reporttype ?
					$scope.search.reporttype : "",
			host: $scope.search.host ? $scope.search.host : "",
			service: $scope.search.service ?
					$scope.search.service : "",
			timeperiod: $scope.search.timeperiod ?
					$scope.search.timeperiod : "",
			t1: $scope.search.t1 ? $scope.search.t1 : 0,
			t2: $scope.search.t2 ? $scope.search.t2 : 0,
			breakdown: $scope.search.breakdown ? $scope.search.breakdown :
					"dayofmonth",
			graphevents: $scope.search.graphevents ?
					parseInt($scope.search.graphevents) : 0,
			graphstatetypes: $scope.search.graphstatetypes ?
					parseInt($scope.search.graphstatetypes) : 3,
			assumestateretention: $scope.search.assumestateretention ?
					$scope.search.assumestateretention : false,
			initialstateslogged: $scope.search.initialstateslogged ?
					$scope.search.initialstateslogged : false,
			ignorerepeatedstates: $scope.search.ignorerepeatedstates ?
					$scope.search.ignorerepeatedstates : false
		};

		// Reload index - increment to cause nagios-histogram to reload
		$scope.reload = 0;

		// Application state variables
		$scope.formDisplayed = false;

		// Decoration-related variables
		$scope.lastUpdate = "none";

		var notBlank = function(value) {
			return value != undefined && value != "";
		};

		// Do we have everything necessary to build a histogram?
		$scope.canBuildHistogram = function() {
			if ($scope.params.reporttype == "services" ||
					(notBlank($scope.params.host) &&
					notBlank($scope.params.service))) {
				if ((($scope.params.timeperiod != "") ||
						(($scope.params.t1 != 0) &&
						($scope.params.t2 != 0)))) {
					$scope.params.reporttype = "services";
					return true;
				}
				return false;
			}
			else if ($scope.params.reporttype == "hosts" ||
					notBlank($scope.params.host)) {
				if ((($scope.params.timeperiod != "") ||
						(($scope.params.t1 != 0) &&
						($scope.params.t2 != 0)))) {
					$scope.params.reporttype = "hosts";
					return true;
				}
				return false;
			}
			return false;
		};

		$scope.displayForm = function(size) {
			$scope.formDisplayed = true;
			var modalInstance = $modal.open({
				templateUrl: 'histogram-form.html',
				controller: 'histogramFormCtrl',
				size: size,
				resolve: {
					params: function () {
						return $scope.params;
					}
				}
			});

			modalInstance.result.then(function(params) {
				$scope.formDisplayed = false;
				$scope.params = params;
				$scope.reload++;
			},
			function(reason) {
				$scope.formDisplayed = false;
			});
		};

		if(!$scope.canBuildHistogram()) {
			$scope.displayForm();
		}

		$scope.infoBoxTitle = function() {
			switch ($scope.params.reporttype) {
			case "hosts":
				return "Host Alert Histogram";
				break;
			case "services":
				return "Service Alert Histogram";
				break;
			default:
				return "Alert Histogram";
				break;
			}
		};

	});
