#pragma once

#include "config.hpp"
#include "modules/base.hpp"
#include "drawtypes/bar.hpp"
#include "drawtypes/label.hpp"

namespace modules
{
  DefineModule(BacklightModule, InotifyModule)
  {
    static constexpr auto TAG_LABEL = "<label>";
    static constexpr auto TAG_BAR = "<bar>";
    static constexpr auto TAG_RAMP = "<ramp>";

    std::unique_ptr<drawtypes::Bar> bar;
    std::unique_ptr<drawtypes::Ramp> ramp;
    std::unique_ptr<drawtypes::Label> label;
    std::unique_ptr<drawtypes::Label> label_tokenized;

    std::string path_val, path_max;
    float val = 0, max = 0;

    concurrency::Atomic<int> percentage;

    public:
      explicit BacklightModule(std::string name);

      bool on_event(InotifyEvent *event);
      bool build(Builder *builder, std::string tag);

      void idle() const
      {
        std::this_thread::sleep_for(25ms);
      }
  };
}