#ifndef IDATASOURCE_H
#define IDATASOURCE_H

#include <QObject>
#include "sensorchannel.h"

/** @brief Interfaz abstracta para fuentes de datos de sensores.
 *
 *  Define el contrato que deben cumplir todas las fuentes de datos
 *  (simulador, puerto serial, etc.) para que la UI pueda consumirlas
 *  de forma intercambiable. Emite dataUpdated() cuando hay nuevos valores.
 */
class IDataSource : public QObject {
    Q_OBJECT

public:
    explicit IDataSource(QObject* parent = nullptr) : QObject(parent) {}
    virtual ~IDataSource() = default;

    virtual void start() = 0;               ///< Inicia la adquisición de datos
    virtual void stop() = 0;                ///< Detiene la adquisición de datos
    virtual int sensorCount() const = 0;    ///< Cantidad de canales disponibles
    virtual const SensorChannel& sensor(int index) const = 0;  ///< Acceso por índice

signals:
    void dataUpdated();  ///< Se emite cuando hay datos nuevos disponibles
};

#endif // IDATASOURCE_H