define [
	"base"
], (App) ->
	MAX_PROJECT_NAME_LENGTH = 150
	App.controller "ProjectNameController", ["$scope", "$element", "settings", "ide", ($scope, $element, settings, ide) ->
		projectNameReadOnlyEl = $element.find(".name")[0]

		$scope.state =
			renaming: false
			overflowed: false

		$scope.inputs = {}

		$scope.startRenaming = () ->
			$scope.inputs.name = $scope.project.name
			$scope.state.renaming = true
			$scope.$emit "project:rename:start"

		$scope.finishRenaming = () ->
			$scope.state.renaming = false
			newName = $scope.inputs.name
			if $scope.project.name == newName
				return
			oldName = $scope.project.name
			$scope.project.name = newName
			settings.saveProjectSettings({name: $scope.project.name})
				.catch (response) ->
					{ data, status } = response
					$scope.project.name = oldName
					if status == 400
						ide.showGenericMessageModal("Error renaming project", data)
					else
						ide.showGenericMessageModal("Error renaming project", "Please try again in a moment")

		ide.socket.on "projectNameUpdated", (name) ->
			$scope.$apply () ->
				$scope.project.name = name

		$scope.$watch "project.name", (name) ->
			if name?
				window.document.title = name + " - Online LaTeX Editor ShareLaTeX"
				$scope.$applyAsync () ->
					# This ensures that the element is measured *after* the binding is done (i.e. project name is rendered).
					$scope.state.overflowed = (projectNameReadOnlyEl.scrollWidth > projectNameReadOnlyEl.clientWidth)
	]