from plugin import BasePlugin
from tabs import MucTab

class Plugin(BasePlugin):
    """
    Adds several convenient aliases to /affiliation and /role:
        /visitor
        /participant
        /moderator == /op
        /member == /voice
        /owner
        /admin
        /noaffiliation
    """
    def init(self):
        for role in ['visitor', 'participant' , 'moderator']:
            self.add_tab_command(MucTab, role, self.role(role),
                    '/%s <nick>\n%s: Set the role of a nick to %s.' %
                        (role, role.capitalize(), role), self.complete_nick)

        for aff in ['member', 'owner', 'admin']:
            self.add_tab_command(MucTab, aff, self.affiliation(aff),
                    '/%s <nick>\n%s: set the affiliation of a nick to %s' %
                        (aff, aff.capitalize(), aff), self.complete_nick)

        self.add_tab_command(MucTab, 'noaffiliation', self.affiliation('none'),
                    '/noaffiliation <nick>\nNoAffiliation: set the affiliation of a nick to none.',
                    self.complete_nick)
        self.add_tab_command(MucTab, 'voice', self.affiliation('member'),
                    '/voice <nick>\nVoice: set the affiliation of a nick to member.',
                    self.complete_nick)
        self.add_tab_command(MucTab, 'op', self.role('moderator'),
                    '/op <nick>\nOp: set the role of a nick to moderator.',
                    self.complete_nick)
        self.add_tab_command(MucTab, 'mute', self.role('visitor'),
                    '/mute <nick>\nMute: set the role of a nick to visitor.',
                    self.complete_nick)

    def role(self, role):
        return lambda args: self.core.current_tab().command_role(args+' '+role)

    def affiliation(self, affiliation):
        return lambda args: self.core.current_tab().command_affiliation(
                                    args+' '+affiliation)

    def complete_nick(self, the_input):
        tab = self.core.current_tab()
        compare_users = lambda x: x.last_talked
        word_list = [user.nick for user in sorted(tab.users, key=compare_users, reverse=True)\
                         if user.nick != tab.own_nick]
        return the_input.auto_completion(word_list, '')