from src import EventManager, ModuleManager, utils

@utils.export("channelset", utils.BoolSetting("blacklist",
    "Refuse to join a given channel"))
class Module(ModuleManager.BaseModule):
    @utils.hook("preprocess.send.join")
    @utils.kwarg("priority", EventManager.PRIORITY_HIGH)
    def preprocess_send_join(self, event):
        if event["line"].args:
            channels = event["line"].args[0].split(",")
            keys = event["line"].args[1:]

            changed = False
            channels_out = []
            for channel_name in filter(None, channels):
                id = event["server"].channels.get_id(channel_name, create=False)
                if not id == None and self.bot.database.channel_settings.get(
                        id, "blacklist", False):
                    changed = True
                    if keys:
                        keys.pop(0)
                else:
                    key = None
                    if keys:
                        key = keys.pop(0)
                    channels_out.append([channel_name, key])

            if changed:
                if not channels_out:
                    event["line"].invalidate()
                else:
                    channels = [c[0] for c in channels_out]
                    keys = [c[1] for c in channels_out if c[1]]
                    event["line"].args[0] = ",".join(channels)
                    event["line"].args[1:] = keys

    @utils.hook("received.join")
    def on_join(self, event):
        if event["channel"].get_setting("blacklist", False):
            event["channel"].send_part()