# -*- coding: utf-8 -*-
import logging
import widgetUtils
import output
from wxUI.dialogs.mastodon import userActions as userActionsDialog
from wxUI.dialogs.mastodon import userTimeline as userTimelineDialog
from pubsub import pub
from mastodon import MastodonError, MastodonNotFoundError
#from extra.autocompletionUsers import completion

log = logging.getLogger("controller.mastodon.userActions")

class BasicUserSelector(object):
    def __init__(self, session, users=[]):
        super(BasicUserSelector, self).__init__()
        self.session = session
        self.create_dialog(users=users)

    def create_dialog(self, users):
        pass

    def autocomplete_users(self, *args, **kwargs):
        c = completion.autocompletionUsers(self.dialog, self.session.session_id)
        c.show_menu("dm")

    def search_user(self, user):
        try:
            user = self.session.api.account_lookup(user)
            return user
        except MastodonError:
            log.exception("Error searching for user %s.".format(user))

class userActions(BasicUserSelector):

    def __init__(self, *args, **kwargs):
        super(userActions, self).__init__(*args, **kwargs)
        if self.dialog.get_response() == widgetUtils.OK:
            self.process_action()

    def create_dialog(self, users):
        self.dialog = userActionsDialog.UserActionsDialog(users)
        widgetUtils.connect_event(self.dialog.autocompletion, widgetUtils.BUTTON_PRESSED, self.autocomplete_users)

    def process_action(self):
        action = self.dialog.get_action()
        user = self.dialog.get_user()
        user = self.search_user(user)
        if user == None:
            return
        getattr(self, action)(user)

    def follow(self, user):
        try:
            self.session.api.account_follow(user.id)
        except MastodonError  as err:
            output.speak("Error %s" % (str(err)), True)

    def unfollow(self, user):
        try:
            result = self.session.api.account_unfollow(user.id)
        except MastodonError as err:
            output.speak("Error %s" % (str(err)), True)

    def mute(self, user):
        try:
            id = self.session.api.account_mute(user.id)
        except MastodonError as err:
            output.speak("Error %s" % (str(err)), True)

    def unmute(self, user):
        try:
            id = self.session.api.account_unmute(user.id)
        except MastodonError as err:
            output.speak("Error %s" % (str(err)), True)

    def block(self, user):
        try:
            id = self.session.api.account_block(user.id)
        except MastodonError as err:
            output.speak("Error %s" % (str(err)), True)

    def unblock(self, user):
        try:
            id = self.session.api.account_unblock(user.id)
        except MastodonError as err:
            output.speak("Error %s" % (str(err)), True)

class UserTimeline(BasicUserSelector):

    def create_dialog(self, users):
        self.dialog = userTimelineDialog.UserTimeline(users)
        widgetUtils.connect_event(self.dialog.autocompletion, widgetUtils.BUTTON_PRESSED, self.autocomplete_users)

    def process_action(self):
        action = self.dialog.get_action()
        user = self.dialog.get_user()
        user = self.search_user(user)
        if user == None:
            return
        self.user = user
        return action