#pragma once

#include <QString>
#include <QList>

#include <type_traits>

#include "Token.h"
#include "AstNode.h"
#include "Parser.h"

template <typename T>
QString pprint(T val);

QString pprint(QList<Token> val);
QString pprint(QList<AstNode> val);

template <typename T>
QString pprintDense(QList<T> val)
{
    QString out;
    int lastType = -1;

    for (const T &v : val)
    {
        if ((lastType != v.type() || v.type() != T::SYM) && lastType != -1)
            out += " ";

        out += QString(v);
    }

    return out;
}

template <typename T>
QString pprint(QList<T> val)
{
	QStringList out;

	for (const T &v : val)
		out.append(static_cast<QString>(v));

	return out.join(" ");
}

template <typename T>
QString pprint(T val)
{
	return static_cast<QString>(val);
}

class PPrint
{
public:
    enum Style
    {
        ANSI,
        HTML
    };
};

QString pprint(ParseResult val, const Parser &parser, PPrint::Style style = PPrint::ANSI);

void sout(QString string);
void eout(QString string);
