/*
    blueROCK - for digital rock
    Copyright (C) 2019  Dorian Zedler

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include <QQuickStyle>
#include <QGuiApplication>
#include <QtQml/QQmlContext>
#include <QQmlApplicationEngine>
#include <QUrl>
#include <QFontDatabase>
#include "QZXing.h"

#include "headers/bluerockbackend.h"
#include "headers/appsettings.h"

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);

    QGuiApplication app(argc, argv);
    QFont f = app.font();
    f.setPixelSize(16);
    app.setFont(f);

    // translation
    QString localeName = QLocale::system().bcp47Name();
    QTranslator* translator = new QTranslator(qApp);

    // fallback to en!
    if(!translator->load(":/" + localeName + ".qm"))
        translator->load(":/en.qm");

    QFontDatabase::addApplicationFont(":/fonts/OpenSans-Light.ttf");

    QGuiApplication::installTranslator(translator);

    QQuickStyle::setStyle("Material");

    qmlRegisterType<BlueRockBackend>("de.itsblue.blueROCK", 1, 0, "BlueRockBackend");
    qmlRegisterType<AppSettings>("de.itsblue.blueROCK", 1, 0, "AppSettings");

    QQmlApplicationEngine engine;

#ifdef QT_DEBUG
    engine.rootContext()->setContextProperty("QT_DEBUG", true);
#else
    engine.rootContext()->setContextProperty("QT_DEBUG", false);
#endif

    QZXing::registerQMLTypes();
    QZXing::registerQMLImageProvider(engine);

    engine.rootContext()->setContextProperty("APP_VERSION", APP_VERSION);

    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}
