#pragma once

#include "types/sensor_types.hpp"

#include <chrono>
#include <memory>
#include <ostream>
#include <string>
#include <string_view>
#include <tuple>
#include <vector>

namespace interfaces
{

class SensorListener;

class Sensor
{
  public:
    struct Id
    {
        Id(std::string_view type, std::string_view service,
           std::string_view path) :
            type(type),
            service(service), path(path)
        {}

        std::string type;
        std::string service;
        std::string path;

        bool operator<(const Id& other) const
        {
            return std::tie(type, service, path) <
                   std::tie(other.type, other.service, other.path);
        }

        inline std::string str() const
        {
            return type + ":" + service + ":" + path;
        }
    };

    virtual ~Sensor() = default;

    virtual Id id() const = 0;
    virtual std::string metadata() const = 0;
    virtual std::string getName() const = 0;
    virtual void registerForUpdates(const std::weak_ptr<SensorListener>&) = 0;
    virtual void
        unregisterFromUpdates(const std::weak_ptr<SensorListener>&) = 0;

    virtual LabeledSensorInfo getLabeledSensorInfo() const = 0;
};

} // namespace interfaces

using Sensors = std::vector<std::shared_ptr<interfaces::Sensor>>;
