"""Access to and interface with mpd through bot commands."""

import logging

from django.conf import settings
from mpd import MPDClient

from ircbot.lib import Plugin

log = logging.getLogger(__name__)


class MpdBot(Plugin):
    """Access to and interface with mpd through bot commands."""

    playing_regex = (r'(what\s+is|what\'s)\s+playing\?$')

    def start(self):
        """Set up handlers."""
        self.connection.reactor.add_global_regex_handler(['pubmsg', 'privmsg'], self.playing_regex,
                                                         self.handle_playing, -20)
        super(MpdBot, self).start()

    def stop(self):
        """Tear down handlers."""
        self.connection.reactor.remove_global_regex_handler(['pubmsg', 'privmsg'], self.handle_playing)
        super(MpdBot, self).stop()

    def handle_playing(self, connection, event, match):
        """Watch IRC for inquiries about the playing track  in mpd."""
        log.debug("in Mpd.handle_playing")
        if event.in_privmsg or event.addressed:
            client = MPDClient(use_unicode=True)
            client.connect(settings.MPD_HOST, settings.MPD_PORT)

            if settings.MPD_PASS:
                client.password(settings.MPD_PASS)

            status = client.status()
            log.debug(status)

            state = status.get('state', None)

            if state == 'play':
                current = client.currentsong()
                log.debug(current)

                filename = current.get('file', None)

                if filename:
                    artist = current.get('artist', "Unknown")
                    title = current.get('title', "Unknown")
                    album = current.get('album', "Unknown")

                    np = "{0:s} - {1:s} [{2:s}] 14[{3:s}]".format(artist, title, album, settings.MPD_SITE)
                    return self.bot.reply(event, np, stop=True)
                else:
                    return self.bot.reply(event, "something's playing, but i don't know what!?", stop=True)
            else:
                return self.bot.reply(event, "nothing is playing", stop=True)


plugin = MpdBot