define [
	"base"
], (App) ->

	App.controller "openInSlController", ($scope) ->

		$scope.openInSlText = "Open in ShareLaTeX"
		$scope.isDisabled = false

		$scope.open = ->
			$scope.openInSlText = "Creating..."
			$scope.isDisabled = true
			ga('send', 'event', 'template-site', 'open-in-sl', $('.page-header h1').text())

		$scope.downloadZip = ->
			ga('send', 'event', 'template-site', 'download-zip', $('.page-header h1').text())


	App.factory "algolia", ->
		if window?.sharelatex?.algolia?.app_id?
			client = new AlgoliaSearch(window.sharelatex.algolia?.app_id, window.sharelatex.algolia?.api_key)
			index = client.initIndex(window.sharelatex.algolia?.indexes?.templates)
			return index



	App.controller "SearchController", ($scope, algolia, _) ->
		$scope.hits = []

		$scope.clearSearchText = ->
			$scope.searchQueryText = ""
			updateHits []

		$scope.safeApply = (fn)->
			phase = $scope.$root.$$phase
			if(phase == '$apply' || phase == '$digest')
				$scope.$eval(fn)
			else
				$scope.$apply(fn)

		buildHitViewModel = (hit)->
			result = 
				name : hit._highlightResult.name.value
				description: hit._highlightResult.description.value
				url :"/templates/#{hit._id}"
				image_url: "#{window.sharelatex?.templates?.cdnDomain}/#{hit._id}/v/#{hit.version}/pdf-converted-cache/style-thumbnail"

		updateHits = (hits)->
			$scope.safeApply ->
				$scope.hits = hits

		$scope.search = ->
			query = $scope.searchQueryText
			if !query? or query.length == 0
				updateHits []
				return

			query = "#{window.sharelatex?.templates?.user_id} #{query}"
			algolia.search query, (err, response)->
				if response.hits.length == 0
					updateHits []
				else
					hits = _.map response.hits, buildHitViewModel
					updateHits hits


	App.controller "MissingTemplateController", ($scope, $modal)->
		$scope.showMissingTemplateModal = ->
			$modal.open {
				templateUrl: "missingTemplateModal"
				controller:"MissingTemplateModalController"
			}

	App.controller "MissingTemplateModalController", ($scope, $modalInstance) ->
		$scope.cancel = () ->
			$modalInstance.dismiss()

