// Squawk messenger. 
// Copyright (C) 2019  Yury Gubich <blue@macaw.me>
// 
// 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/>.

#ifndef ROOT_H
#define ROOT_H

#include <QApplication>
#include <QTranslator>
#include <QIcon>
#include <QSettings>
#include <QThread>

#include <vector>

#include <core/squawk.h>
#include <core/signalcatcher.h>

#include <shared/global.h>

#include "application.h"

class Root : public QApplication {
    Q_OBJECT
public:
    Root(int& argc, char* argv[]);
    ~Root();
    bool notify(QObject* receiver, QEvent* e) override;
    int run();

    bool initializeSettings();

private slots:
    void onCoreDestroyed();

private:
    void initializeTranslation();
    void initializeAppIcon();
    void initializeComponents();

private:
    static const std::vector<unsigned int> appIconSizes;

    SignalCatcher signalCatcher;
    QTranslator defaultTranslator;
    QTranslator currentTranslator;
    QIcon appIcon;
    QSettings settings;
    bool componentsInitialized;

    Shared::Global* global;
    QThread* coreThread;
    Core::Squawk* core;
    Application* gui;

};

#endif // ROOT_H