"""Track basic IRC settings and similar."""

import logging
import re

from django.db import models
from django.utils import timezone


log = logging.getLogger('ircbot.models')


class Alias(models.Model):

    """Allow for aliasing of arbitrary regexes to normal supported commands."""

    pattern = models.CharField(max_length=200, unique=True)
    replacement = models.CharField(max_length=200)

    class Meta:
        verbose_name_plural = "aliases"

    def __unicode__(self):
        """String representation."""

        return u"{0:s} -> {1:s}".format(self.pattern, self.replacement)

    def replace(self, what):
        command = None
        if re.search(self.pattern, what, flags=re.IGNORECASE):
            command = re.sub(self.pattern, self.replacement, what, flags=re.IGNORECASE)

        return command


class BotAdmin(models.Model):

    """Configure admins, which can do things through the bot that others can't."""

    nickmask = models.CharField(max_length=200, unique=True)

    def __unicode__(self):
        """String representation."""

        return u"{0:s}".format(self.nickmask)


class IrcChannel(models.Model):

    """Track channel settings."""

    name = models.CharField(max_length=200, unique=True)
    autojoin = models.BooleanField(default=False)

    topic_msg = models.TextField(default='', blank=True)
    topic_time = models.DateTimeField(default=timezone.now)
    topic_by = models.CharField(max_length=200, default='', blank=True)

    def __unicode__(self):
        """String representation."""

        return u"{0:s}".format(self.name)


class IrcPlugin(models.Model):

    """Represent an IRC plugin and its loading settings."""

    path = models.CharField(max_length=200, unique=True)
    autoload = models.BooleanField(default=False)

    class Meta:
        ordering = ['path']

    def __unicode__(self):
        """String representation."""

        return u"{0:s}".format(self.path)