# -*- coding: utf-8 -*-
import output
import logging
from presenters import base

log = logging.getLogger(__file__)

class displayPollPresenter(base.basePresenter):

	def __init__(self, session, poll, view, interactor, show_results=False):
		super(displayPollPresenter, self).__init__(view=view, interactor=interactor, modulename="display_poll")
		self.poll = poll["poll"]
		self.session = session
		self.get_poll()
		self.load_poll(show_results)
		self.run()

	def get_poll(self):
		# Retrieve the poll again so we will have a fresh and updated object.
		data = dict(owner_id=self.poll["owner_id"], is_board=int(self.poll["is_board"]), poll_id=self.poll["id"])
		self.poll = self.session.vk.client.polls.getById(**data)

	def load_poll(self, load_results=False):
		user = self.session.get_user(self.poll["author_id"])
		title = _("Poll from {user1_nom}").format(**user)
		self.send_message("set_title", value=title)
		self.send_message("set", control="question", value=self.poll["question"])
		if len(self.poll["answer_ids"]) > 0 or ("is_closed" in self.poll and self.poll["is_closed"] == True) or load_results == True or ("can_vote" in self.poll and self.poll["can_vote"] == False):
			options = []
			for i in self.poll["answers"]:
				options.append((i["text"], i["votes"], i["rate"]))
			self.send_message("add_options", options=options, multiple=self.poll["multiple"])
			self.send_message("done")
			self.send_message("disable_control", control="ok")
		else:
			options = []
			for i in self.poll["answers"]:
				options.append(i["text"])
			self.send_message("add_options", options=options, multiple=self.poll["multiple"])
			self.send_message("done")

	def vote(self, answers):
		ids = ""
		for i in range(0, len(self.poll["answers"])):
			if answers[i] == True:
				ids = ids+"{answer_id},".format(answer_id=self.poll["answers"][i]["id"])
				if self.poll["multiple"] == False:
					break
		if ids == "":
			log.exception("An error occurred when retrieving answer IDS for the following poll: %r. Provided answer list: %r" % (self.poll, answers))
			return
		data = dict(owner_id=self.poll["owner_id"], poll_id=self.poll["id"], answer_ids=ids, is_board=int(self.poll["is_board"]))
		result = self.session.vk.client.polls.addVote(**data)
		if result == 1:
			output.speak(_("Your vote has been added to this poll."))