#pragma once

#include <QObject>
#include <QJsonDocument>
#include <QFile>

#include "Cell.h"
#include "NbRuntime.h"
#include "CellModel.h"

class Notebook : public QObject
{
    Q_OBJECT
    QML_ELEMENT

    Q_PROPERTY(CellModel *cellModel READ cellModel NOTIFY cellModelChanged)
    Q_PROPERTY(QString savePath READ savePath WRITE setSavePath NOTIFY savePathChanged)

public:
    ~Notebook();
    explicit Notebook(QObject *parent = nullptr);
    Notebook(const Notebook &other, QObject *parent = nullptr);

    CellModel *cellModel();

    Q_INVOKABLE void runCell(QUuid uuid);
    Q_INVOKABLE void quitCell(QUuid uuid);
    Q_INVOKABLE void runAll();
    Q_INVOKABLE void reset();

    Q_INVOKABLE void fromJson(QJsonDocument doc);
    Q_INVOKABLE void open(QString path);

    Q_INVOKABLE QJsonDocument toJson() const;
    Q_INVOKABLE void save();

    Q_INVOKABLE bool savePathSet();

    QString savePath();
    void setSavePath(QString savePath);

signals:
    void cellModelChanged();
    void saveError(QString message);
    void savePathChanged(QString savePath);
    void saved();

protected slots:
    void cellFinishedRunning(Cell *cell, RuntimeResult result);
    void cellFailedToParse(Cell *cell, ParseResult result, Parser parser);
    void cellWaiting(Cell *cell);
    void cellRunning(Cell *cell);
    void cellQuit(Cell *cell);

protected:
    friend class CellModel;

    QList<Cell *> _cells;
    CellModel *_cellModel;
    QThread *_rtThread;
    NbRuntime *_rt;
    QString _savePath = "";
    bool _runningAll = false;
};

Q_DECLARE_METATYPE(Notebook)
