# -*- coding: utf-8 -*-
"""
Created on Nov 07, 2014

@author: Tyranic-Moron
"""
from twisted.plugin import IPlugin
from pymoronbot.moduleinterface import IModule
from pymoronbot.modules.commandinterface import BotCommand
from zope.interface import implementer

from future.utils import iteritems

from pymoronbot.message import IRCMessage
from pymoronbot.response import IRCResponse, ResponseType


@implementer(IPlugin, IModule)
class Flip(BotCommand):
    def triggers(self):
        return ['flip']

    def help(self, query):
        return 'flip <text> - flips the text given to it'

    def onLoad(self):
        table = {
            u'a': u'ɐ',    u'A': u'∀',
            u'b': u'q',    u'B': u'ᗺ',
            u'c': u'ɔ',    u'C': u'Ↄ',
            u'd': u'p',    u'D': u'◖',
            u'e': u'ǝ',    u'E': u'Ǝ',
            u'f': u'ɟ',    u'F': u'Ⅎ',
            u'g': u'ƃ',    u'G': u'⅁',
            u'h': u'ɥ',    u'H': u'H',
            u'i': u'ı',    u'I': u'I',
            u'j': u'ɾ',    u'J': u'ſ',
            u'k': u'ʞ',    u'K': u'⋊',
            u'l': u'ʃ',    u'L': u'⅂',
            u'm': u'ɯ',    u'M': u'W',
            u'n': u'u',    u'N': u'ᴎ',
            u'o': u'o',    u'O': u'O',
            u'p': u'd',    u'P': u'Ԁ',
            u'q': u'b',    u'Q': u'Ό',
            u'r': u'ɹ',    u'R': u'ᴚ',
            u's': u's',    u'S': u'S',
            u't': u'ʇ',    u'T': u'⊥',
            u'u': u'n',    u'U': u'∩',
            u'v': u'ʌ',    u'V': u'Λ',
            u'w': u'ʍ',    u'W': u'M',
            u'x': u'x',    u'X': u'X',
            u'y': u'ʎ',    u'Y': u'⅄',
            u'z': u'z',    u'Z': u'Z',
            u'0': u'0',
            u'1': u'⇂',
            u'2': u'ᘔ',
            u'3': u'Ɛ',
            u'4': u'ᔭ',
            u'5': u'5',
            u'6': u'9',
            u'7': u'Ɫ',
            u'8': u'8',
            u'9': u'6',
            u'.': u'˙',
            u',': u"'",
            u"'": u',',
            u'"': u'„',
            u'!': u'¡',
            u'?': u'¿',
            u'<': u'>',
            u'(': u')',
            u'[': u']',
            u'{': u'}',
            u'_': u'‾',
            u'^': u'∨',
            u';': u'؛',
            u'&': u'⅋',
            u'⁅': u'⁆',
            u'∴': u'∵',
            u'‿': u'⁀',
        }
        # Create and append the inverse dictionary
        table.update({v: k for k,v in iteritems(table)})
        self.translation = {ord(k): v for k,v in iteritems(table)}

    def execute(self, message):
        """
        @type message: IRCMessage
        """
        if len(message.ParameterList) > 0:
            translated = message.Parameters.translate(self.translation)
            reversed = translated[::-1]
            return IRCResponse(ResponseType.Say, reversed, message.ReplyTo)
        else:
            return IRCResponse(ResponseType.Say, 'Flip what?', message.ReplyTo)


flip = Flip()
