// Copyright 2022 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LIBMEMS_IIO_EVENT_IMPL_H_
#define LIBMEMS_IIO_EVENT_IMPL_H_

#include <memory>
#include <optional>
#include <string>

#include <base/files/file_path.h>

#include "libmems/export.h"
#include "libmems/iio_event.h"

namespace libmems {

class LIBMEMS_EXPORT IioEventImpl : public IioEvent {
 public:
  // in_[chan_type][channel]_[event_type]_[direction]_en.
  static std::unique_ptr<IioEventImpl> Create(base::FilePath file);

  IioEventImpl(const IioEventImpl&) = delete;
  IioEventImpl& operator=(const IioEventImpl&) = delete;
  ~IioEventImpl() override = default;

  // IioEvent overrides.
  bool IsEnabled() const override;
  void SetEnabled(bool en) override;
  std::optional<std::string> ReadStringAttribute(
      const std::string& name) const override;
  bool WriteStringAttribute(const std::string& name,
                            const std::string& value) override;

 private:
  IioEventImpl(base::FilePath event_dir,
               std::string event_pattern,
               iio_chan_type chan_type,
               iio_event_type event_type,
               iio_event_direction direction,
               int channel);

  base::FilePath GetAttributePath(const std::string& attribute) const;

  // /sys/bus/iio/devices/iio:deviceX/events/.
  base::FilePath event_dir_;
  // Ex: "in_proximity0_thresh_either_%s".
  std::string event_pattern_;
};

}  // namespace libmems

#endif  // LIBMEMS_IIO_EVENT_IMPL_H_
