logger = require('logger-sharelatex')
ReferencesHandler = require('./ReferencesHandler')
settings = require('settings-sharelatex')
EditorRealTimeController = require("../Editor/EditorRealTimeController")

module.exports = ReferencesController =


	index: (req, res) ->
		projectId = req.params.Project_id
		shouldBroadcast = req.body.shouldBroadcast
		docIds = req.body.docIds
		if (!docIds or !(docIds instanceof Array))
			logger.err {projectId, docIds}, "docIds is not valid, should be either Array or String 'ALL'"
			return res.sendStatus 400
		logger.log {projectId, docIds: docIds}, "index references for project"
		ReferencesHandler.index projectId, docIds, (err, data) ->
			if err?
				logger.err {err, projectId}, "error indexing all references"
				return res.sendStatus 500
			ReferencesController._handleIndexResponse(req, res, projectId, shouldBroadcast, data)

	indexAll: (req, res) ->
		projectId = req.params.Project_id
		shouldBroadcast = req.body.shouldBroadcast
		logger.log {projectId}, "index all references for project"
		ReferencesHandler.indexAll projectId, (err, data) ->
			if err?
				logger.err {err, projectId}, "error indexing all references"
				return res.sendStatus 500
			ReferencesController._handleIndexResponse(req, res, projectId, shouldBroadcast, data)

	_handleIndexResponse: (req, res, projectId, shouldBroadcast, data) ->
		if !data? or !data.keys?
			return res.json({projectId, keys: []})
		if shouldBroadcast
			logger.log {projectId}, "emitting new references keys to connected clients"
			EditorRealTimeController.emitToRoom projectId, 'references:keys:updated', data.keys
		return res.json data
