#pragma once

#include <atomic>

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

namespace modules
{
  DefineModule(MemoryModule, TimerModule)
  {
    static constexpr auto TAG_LABEL = "<label>";
    static constexpr auto TAG_BAR_USED = "<bar-used>";
    static constexpr auto TAG_BAR_FREE = "<bar-free>";

    std::unique_ptr<drawtypes::Bar> bar_used;
    std::unique_ptr<drawtypes::Bar> bar_free;
    std::unique_ptr<drawtypes::Label> label;
    std::unique_ptr<drawtypes::Label> label_tokenized;

    std::atomic<int> percentage_used;
    std::atomic<int> percentage_free;

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

      bool update();
      bool build(Builder *builder, std::string tag);
  };
}