{% extends templates['booth/base.html'] %}

{#
	Eos - Verifiable elections
	Copyright © 2017-18  RunasSudo (Yingtong Li)
	
	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU Affero General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.
	
	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU Affero General Public License for more details.
	
	You should have received a copy of the GNU Affero General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
#}

{% block content %}
	<div class="ui basic segment" style="min-height: 4em;">
		<div class="ui active text loader">Preparing your ballot. Please wait.</div>
	</div>
{% endblock %}

{% block after %}
	<script>
		boothWorker.onmessage = function(msg) {
			try {
				rawAnswers = [];
				for (var answer_json of booth.answers) {
					rawAnswers.push(eosjs.eos.core.objects.__all__.EosObject.deserialise_and_unwrap(answer_json, null));
				}
				
				encryptedAnswers = [];
				for (var encrypted_answer_json of msg.data.encrypted_answers) {
					encryptedAnswers.push(eosjs.eos.core.objects.__all__.EosObject.deserialise_and_unwrap(encrypted_answer_json, null));
				}
				
				booth.ballot = eosjs.eos.base.election.__all__.Ballot();
				booth.ballot.answers = rawAnswers;
				booth.ballot.encrypted_answers = encryptedAnswers;
				booth.ballot.election_id = election._id;
				booth.ballot.election_hash = eosjs.eos.core.hashing.__all__.SHA256().update_obj(election).hash_as_b64();
				
				if (should_do_fingerprint) {
					// String.prototype.join confuses fingerprintjs2
					var strjoin = String.prototype.join;
					String.prototype.join = undefined;
					try {
						new Fingerprint2().get(function(result, components) {
							String.prototype.join = strjoin;
							booth.fingerprint = components;
							nextTemplate();
						});
					} catch (ex) {
						console.error(ex);
						nextTemplate();
					}
				} else {
					nextTemplate();
				}
			} catch (err) {
				boothError(err);
				throw err;
			}
		}
		boothWorker.onerror = function(err) {
			boothError(err);
			throw err;
		}
		try {
			boothWorker.postMessage({
				"action": "generateEncryptedVote",
				"static_base_url": "{{ static_base_url }}",
				"election": eosjs.eos.core.objects.__all__.EosObject.serialise_and_wrap(election, null),
				"answers": booth.answers
			});
		} catch (err) {
			boothError(err);
			throw err;
		}
	</script>
{% endblock %}