#ifndef EXECUTOR_H
#define EXECUTOR_H

#include <QObject>

class Machine;
class QTimer;

class Executor : public QObject
{
    Q_OBJECT
public:
    explicit Executor(Machine* m = nullptr);
    ~Executor() override;

    bool hasEnded() const;
    void resetProgram();

public slots:
    // Zažene oz. nadaljuje samodejno izvajanje.
    void start();

    // Zaustavi samodejno izvajanje.
    void stop();

    // Izvede en ukaz.
    void step();

signals:
    void updateRequested();
    void signalEnded();
    void signalStarted();
    void signalStopped();

private slots:
    void runStep(); // povezan s QTimer::timeout

private:
    Machine* machine = nullptr;
    QTimer* timer = nullptr;
    bool running = false;
    bool ended = false;
    bool stepping = false; // prepreči reentrant step
    int intervalMs = 500; // privzeta frekvenca izvajanja v ms
};

#endif // EXECUTOR_H
