#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>

#include <iostream>

#include <poppler-qt6.h>

int main(int argc, char **argv)
{
    QCoreApplication a(argc, argv); // QApplication required!

    if (!(argc == 2)) {
        qWarning() << "usage: poppler-fonts filename";
        exit(1);
    }

    std::unique_ptr<Poppler::Document> doc = Poppler::Document::load(QString::fromLocal8Bit(argv[1]));
    if (!doc) {
        qWarning() << "doc not loaded";
        exit(1);
    }

    std::cout << "name                                 type         emb sub font file";
    std::cout << std::endl;
    std::cout << "------------------------------------ ------------ --- --- ---------";
    std::cout << std::endl;

    Q_FOREACH (const Poppler::FontInfo &font, doc->fonts()) {
        if (font.name().isNull()) {
            std::cout << qPrintable(QStringLiteral("%1").arg(QStringLiteral("[none]"), -37));
        } else {
            std::cout << qPrintable(QStringLiteral("%1").arg(font.name(), -37));
        }
        switch (font.type()) {
        case Poppler::FontInfo::unknown:
            std::cout << "unknown           ";
            break;
        case Poppler::FontInfo::Type1:
            std::cout << "Type 1            ";
            break;
        case Poppler::FontInfo::Type1C:
            std::cout << "Type 1C           ";
            break;
        case Poppler::FontInfo::Type3:
            std::cout << "Type 3            ";
            break;
        case Poppler::FontInfo::TrueType:
            std::cout << "TrueType          ";
            break;
        case Poppler::FontInfo::CIDType0:
            std::cout << "CID Type 0        ";
            break;
        case Poppler::FontInfo::CIDType0C:
            std::cout << "CID Type 0C       ";
            break;
        case Poppler::FontInfo::CIDTrueType:
            std::cout << "CID TrueType      ";
            break;
        case Poppler::FontInfo::Type1COT:
            std::cout << "Type 1C (OT)      ";
            break;
        case Poppler::FontInfo::TrueTypeOT:
            std::cout << "TrueType (OT)     ";
            break;
        case Poppler::FontInfo::CIDType0COT:
            std::cout << "CID Type 0C (OT)  ";
            break;
        case Poppler::FontInfo::CIDTrueTypeOT:
            std::cout << "CID TrueType (OT) ";
            break;
        }

        if (font.isEmbedded()) {
            std::cout << "yes ";
        } else {
            std::cout << "no  ";
        }
        if (font.isSubset()) {
            std::cout << "yes ";
        } else {
            std::cout << "no  ";
        }
        std::cout << qPrintable(font.file());
        std::cout << std::endl;
    }
}
