Template.mailMessagesInstructions.helpers
	name: ->
		return Meteor.user().name
	email: ->
		return Meteor.user().emails?[0]?.address
	roomName: ->
		return ChatRoom.findOne(Session.get('openedRoom'))?.name
	erroredEmails: ->
		return Template.instance()?.erroredEmails.get().join(', ')

Template.mailMessagesInstructions.events
	'click .cancel': (e, t) ->
		t.reset()

	'click .send': (e, t) ->
		t.$('.error').hide()
		$btn = t.$('button.send')
		oldBtnValue = $btn.html()
		$btn.html(TAPi18n.__('Sending'))

		selectedMessages = $('.messages-box .message.selected')

		error = false
		if selectedMessages.length is 0
			t.$('.error-select').show()
			error = true

		if t.$('input[name=to]').val().trim()
			rfcMailPatternWithName = /^(?:.*<)?([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)(?:>?)$/
			emails = t.$('input[name=to]').val().trim().split(',')
			erroredEmails = []
			for email in emails
				unless rfcMailPatternWithName.test email.trim()
					erroredEmails.push email.trim()

			t.erroredEmails.set erroredEmails
			if erroredEmails.length > 0
				t.$('.error-invalid-emails').show()
				error = true
		else
			t.$('.error-missing-to').show()
			error = true

		if error
			$btn.html(oldBtnValue)
		else
			data =
				rid: Session.get('openedRoom')
				to: t.$('input[name=to]').val().trim()
				subject: t.$('input[name=subject]').val().trim()
				messages: selectedMessages.map((i, message) -> return message.id).toArray()
				language: localStorage.getItem('userLanguage')

			Meteor.call 'mailMessages', data, (err, result) ->
				$btn.html(oldBtnValue)
				if err?
					return toastr.error(err.reason or err.message)

				toastr.success(TAPi18n.__('Your_email_has_been_queued_for_sending'))
				t.reset()

	'click .select-all': (e, t) ->
		t.$('.error-select').hide()

		view = Blaze.getView($('.messages-box')[0])
		view?.templateInstance?().selectedMessages = _.pluck(ChatMessage.find({rid: Session.get('openedRoom')})?.fetch(), '_id')
		$(".messages-box .message").addClass('selected')

Template.mailMessagesInstructions.onCreated ->
	@erroredEmails = new ReactiveVar []

	@reset = ->
		RocketChat.TabBar.setTemplate('channelSettings')
		view = Blaze.getView($('.messages-box')[0])
		view?.templateInstance?().resetSelection?(false)

	@autorun =>
		if Session.get('channelSettingsMailMessages') isnt Session.get('openedRoom')
			this.reset()