from django.utils.translation import gettext as _

from misago.threads.models import Poll


class PollMergeHandler(object):
    def __init__(self, threads):
        self._list = []
        self._choices = {0: None}

        self._is_valid = False
        self._resolution = None

        self.threads = threads

        for thread in threads:
            try:
                self._list.append(thread.poll)
                self._choices[thread.poll.pk] = thread.poll
            except Poll.DoesNotExist:
                pass

        self._list.sort(key=lambda choice: choice.thread_id)

    @property
    def polls(self):
        return self._list

    def is_merge_conflict(self):
        return len(self._list) > 1

    def get_available_resolutions(self):
        resolutions = [(0, _("Delete all polls"))]
        for poll in self._list:
            resolutions.append((poll.pk, poll.question))
        return resolutions

    def set_resolution(self, resolution):
        try:
            resolution_clean = int(resolution)
        except (TypeError, ValueError):
            return

        if resolution_clean in self._choices:
            self._resolution = self._choices[resolution_clean]
            self._is_valid = True

    def is_valid(self):
        return self._is_valid

    def get_resolution(self):
        return self._resolution or None
