# pylint: disable=C0111,R0903

"""Displays the brightness of a display

Parameters:
    * brightness.step: The amount of increase/decrease on scroll in % (defaults to 2)

"""

import glob
import shutil

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

import util.cli

class Module(core.module.Module):
    @core.decorators.every(seconds=30)
    def __init__(self, config, theme):
        super().__init__(config, theme, core.widget.Widget(self.brightness))

        self.__brightness = 'n/a'
        self.__readcmd = None
        step = self.parameter('step', 2)

        if shutil.which('light'):
            self.__readcmd = self.__light
            self.register_cmd('light -A {}%'.format(step),
                'light -U {}%'.format(step))
        elif shutil.which('brightnessctl'):
            self.__readcmd = self.__brightnessctl
            self.register_cmd('brightnessctl s {}%+'.format(step),
                'brightnessctl s {}%-'.format(step))
        else:
            self.__readcmd = self.__xbacklight
            self.register_cmd('xbacklight +{}%'.format(step),
                'xbacklight -{}%'.format(step))

    def register_cmd(self, up_cmd, down_cmd):
        core.input.register(self, button=core.input.WHEEL_UP, cmd=up_cmd)
        core.input.register(self, button=core.input.WHEEL_DOWN, cmd=down_cmd)

    def brightness(self, widget):
        return self.__brightness

    def __light(self):
        return util.cli.execute('light').strip()

    def __brightnessctl(self):
        m = util.cli.execute('brightnessctl m').strip()
        g = util.cli.execute('brightnessctl g').strip()
        return float(g)/float(m)*100.0

    def __xbacklight(self):
        return util.cli.execute('xbacklight -get').strip()

    def update(self):
        try:
            self.__brightness = '{:3.0f}%'.format(float(self.__readcmd()))
        except:
            self.__brightness = 'n/a'

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