"""
This plugin adds a "cyber" prefix to a random word in your chatroom messages.

Usage
-----

Say something in a MUC tab.

Configuration options
---------------------

.. glossary::

    frequency
        **Default:** ``10``

        The percentage of the time the plugin will activate (randomly). 100 for every message, <= 0 for never.
"""

from poezio.plugin import BasePlugin
from poezio import tabs
from random import choice, randint
from slixmpp import Message
import re

DEFAULT_CONFIG = {'cyber': {'frequency': 10}}


class Plugin(BasePlugin):

    default_config = DEFAULT_CONFIG

    def init(self) -> None:
        self.api.add_event_handler('muc_say', self.cyberize)

    def cyberize(self, msg: Message, tab: tabs.ChatTab) -> None:
        if randint(1, 100) > self.config.get('frequency'):
            return
        words = [
            word for word in re.split(r'\W+', msg['body']) if len(word) > 3
        ]
        if words:
            word = choice(words)
            msg['body'] = msg['body'].replace(word, 'cyber' + word)
