define [
	"base"
	"ide/editor/Document"
], (App, Document) ->
	App.controller "SavingNotificationController", ["$scope", "$interval", "ide", ($scope, $interval, ide) ->
		setInterval () ->
			pollSavedStatus()
		, 1000

		$(window).bind 'beforeunload', () =>
			warnAboutUnsavedChanges()

		$scope.docSavingStatus = {}
		pollSavedStatus = () ->
			oldStatus = $scope.docSavingStatus
			oldUnsavedCount = $scope.docSavingStatusCount
			newStatus = {}
			newUnsavedCount = 0

			for doc_id, doc of Document.openDocs
				saving = doc.pollSavedStatus()
				if !saving
					newUnsavedCount++
					if oldStatus[doc_id]?
						newStatus[doc_id] = oldStatus[doc_id]
						newStatus[doc_id].unsavedSeconds += 1
					else
						newStatus[doc_id] = {
							unsavedSeconds: 0
							doc: ide.fileTreeManager.findEntityById(doc_id)
						}

			# for performance, only update the display if the old or new
			# counts of unsaved files are nonzeror.  If both old and new
			# unsaved counts are zero then we know we are in a good state
			# and don't need to do anything to the UI.
			if newUnsavedCount or oldUnsavedCount
				$scope.docSavingStatus = newStatus
				$scope.docSavingStatusCount = newUnsavedCount
				$scope.$apply()

		warnAboutUnsavedChanges = () ->
			if Document.hasUnsavedChanges()
				return "You have unsaved changes. If you leave now they will not be saved."
	]