from common import userstatus
from events.common import Replyto, Lastact, MessageStatistics

bold = "\x02"
italic = "\x1D"
underline = "\x1F"
reverse = "\x16"    # swap background and foreground colors ("reverse video")
reset = "\x0F"
blue = "\x0302"
green = "\x0303"
red = "\x0304"
grey = "\x0314"

def process_event(self, connection, event):
    
    # Update last act.
    Lastact.update(self, event.source.nick, "action", channel=event.target, lastact=event.arguments[0])
    
    # Save statistic to database.
    MessageStatistics.update(self, event, "action")
    
    # Stop if channelfunction chat if off.
    if not self.db.one("SELECT chat FROM channels WHERE name='" + event.target + "' AND network='" + self.network + "'"):
        return

    # Slap guard.
    if event.arguments[0].lower().startswith("slaps ") and not event.target == connection.get_nickname():   # Channel action that stats with "slaps ".
        
        # Stop if chat channel function is off.
        if not self.db.one("SELECT chat FROM channels WHERE name='" + event.target + "' AND network='" + self.network + "'"):
            return
    
        # Only protect the worty.
        if not userstatus.atleast_voiced(self, event.arguments[0].split(" ")[1], self.homechannel) and not userstatus.atleast_oper(self, event.arguments[0].split(" ")[1], self.homechannel): # Insufficient rights.
            if event.arguments[0].split(" ")[1].lower() == connection.get_nickname(): # Bot slapped
                Replyto.name(connection, event)
            return
        if userstatus.atleast_voiced(self, event.source.nick, self.homechannel):   # Slapper has atleast voice in home channel.
            if not self.channels[self.homechannel].is_owner(event.arguments[0].split(" ")[1]):  # Slappee is not owner.
                if event.arguments[0].split(" ")[1].lower() == connection.get_nickname(): # Bot slapped
                    Replyto.name(connection, event)
                return
            if self.channels[self.homechannel].is_owner(event.source.nick) and  self.channels[self.homechannel].is_owner(event.arguments[0].split(" ")[1]): # Slapper and slappee are owner.
                if event.arguments[0].split(" ")[1].lower() == connection.get_nickname(): # Bot slapped
                    Replyto.name(connection, event)
                return
        
        # Respond.
        if " with a " in event.arguments[0]:
            if event.arguments[0].split(" with a ", maxsplit=1)[1]:
                if event.arguments[0].split(" ")[1].lower() == connection.get_nickname(): # Bot slapped
                    connection.action(event.target, "Takes the " + event.arguments[0].split(" with a ", maxsplit=1)[1] + " like a robot.")
                else:
                    connection.action(event.target, "swiftly jumps in front of " + red + event.arguments[0].split(" ")[1] + reset + " to block the " + event.arguments[0].split(" with a ", maxsplit=1)[1])

            elif event.arguments[0].split(" ")[1].lower() == connection.get_nickname(): # Bot slapped
                connection.action(event.target, "bites " + red + event.source.nick + reset + " furiously.")
            else:
                connection.action(event.target, "swiftly jumps in front of " + red + event.arguments[0].split(" ")[1] + reset + " to block the slap.")
        elif len(event.arguments[0].split(" ")) > 1:
            if event.arguments[0].split(" ")[1].lower() == connection.get_nickname(): # Bot slapped
                connection.action(event.target, "bites " + red + event.source.nick + reset + " furiously.")
            else:
                connection.action(event.target, "swiftly jumps in front of " + red + event.arguments[0].split(" ")[1] + reset + " to block the slap.")
    
    # Respond to own name.
    elif connection.get_nickname().lower() in event.arguments[0].lower() and event.source.nick is not connection.get_nickname(): # Bot's name was mentioned, not by the bot itself.
        Replyto.name(connection, event)
