# pylint: disable=C0111,R0903

"""Displays the status of watson (time-tracking tool)

Requires the following executable:
    * watson
"""

import logging
import re
import functools

import core.module
import core.widget
import core.input
import core.decorators

import util.cli

class Module(core.module.Module):
    @core.decorators.every(minutes=60)
    def __init__(self, config, theme):
        super().__init__(config, theme, core.widget.Widget(self.text))

        self.__tracking = False
        self.__project = ''
        core.input.register(self, button=core.input.LEFT_MOUSE, cmd=self.toggle)

    def toggle(self, widget):
        self.__project = 'hit'
        if self.__tracking:
            util.cli.execute('watson stop')
        else:
            util.cli.execute('watson restart')
        self.__tracking = not self.__tracking

    def text(self, widget):
        if self.__tracking:
            return self.__project
        else:
            return 'Paused'

    def update(self):
        output = util.cli.execute('watson status')
        if re.match('No project started', output):
            self.__tracking = False
            return

        self.__tracking = True
        m = re.search(r'Project (.+) started', output)
        self.__project = m.group(1)

    def state(self, widget):
        return 'on' if self.__tracking else 'off'

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4