/*********************************************************************
 *  Author  : Tino Weinkauf and Wiebke K�pp
 *  Init    : Thursday, October 12, 2017 - 10:03:53
 *
 *  Project : KTH Inviwo Modules
 *
 *  License : Follows the Inviwo BSD license model
 *********************************************************************
 */

#pragma once

#include "util.h"
#include "temporaltree.h"

/** \class TemporalTreeJSONReader
    \brief Reads a TemporalTree from a JSON ASCII file.

    @author Tino Weinkauf and Wiebke K�pp
*/
class TemporalTreeJSONReader {
    // Friends
    // Types
public:
    // Construction / Deconstruction
public:
    TemporalTreeJSONReader();
    virtual ~TemporalTreeJSONReader() = default;

    // Methods
public:
    /// Reads the data
    std::shared_ptr<TemporalTree> readData(std::string_view filePath);
};

/** \class TemporalTreeJSONReaderCBOR
    \brief Reads a TemporalTree from a JSON CBOR file.

    @author Tino Weinkauf and Wiebke K�pp
*/
class TemporalTreeJSONReaderCBOR {
    // Friends
    // Types
public:
    // Construction / Deconstruction
public:
    TemporalTreeJSONReaderCBOR();
    virtual ~TemporalTreeJSONReaderCBOR() = default;

    // Methods
public:
    /// Reads the data
    std::shared_ptr<TemporalTree> readData(std::string_view filePath);
};

/** \class TemporalTreeJSONReaderMsgPack
    \brief Reads a TemporalTree from a JSON MsgPack file.

    @author Tino Weinkauf and Wiebke K�pp
*/
class TemporalTreeJSONReaderMsgPack {
    // Friends
    // Types
public:
    // Construction / Deconstruction
public:
    TemporalTreeJSONReaderMsgPack();
    virtual ~TemporalTreeJSONReaderMsgPack() = default;

    // Methods
public:
    /// Reads the data
    std::shared_ptr<TemporalTree> readData(std::string_view filePath);
};

/** \class TemporalTreeJSONReaderNTG
    \brief Reads a TemporalTree in the form of a Nested Tracking Graph from a JSON ASCII file.

    @author Tino Weinkauf and Wiebke K�pp
*/
class TemporalTreeJSONReaderNTG {
    // Friends
    // Types
public:
    // Construction / Deconstruction
public:
    TemporalTreeJSONReaderNTG();
    virtual ~TemporalTreeJSONReaderNTG() = default;

    // Methods
public:
    /// Reads the data
    std::shared_ptr<TemporalTree> readData(std::string_view filePath);
};
