#pragma once

#include "interfaces.hpp"
#include "util.hpp"

#include <cstdint>
#include <string>

namespace pid_control
{

/*
 * A WriteInterface that is expecting a path that's sysfs, but really could be
 * any filesystem path.
 */
class SysFsWritePercent : public WriteInterface
{
  public:
    SysFsWritePercent(const std::string& writePath, int64_t min, int64_t max) :
        WriteInterface(min, max), _writePath(FixupPath(writePath))
    {}

    void write(double value) override;

  private:
    std::string _writePath;
};

class SysFsWrite : public WriteInterface
{
  public:
    SysFsWrite(const std::string& writePath, int64_t min, int64_t max) :
        WriteInterface(min, max), _writePath(FixupPath(writePath))
    {}

    void write(double value) override;

  private:
    std::string _writePath;
};

} // namespace pid_control
