#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "assetlist.h"

#include <QAbstractButton>
#include <QApplication>
#include <QBitmap>
#include <QComboBox>
#include <QFile>
#include <QTextStream>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    /*connect( comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), [=](int index){
        ui->stackedWidget_2->setCurrentIndex(index);
    });

    const int currentIndex = 0;
    comboBox->setCurrentIndex(currentIndex);
    ui->stackedWidget_2->setCurrentIndex(currentIndex);*/

    /*const auto pOutputDock = new OutputDock();
    pOutputDock->setMinimumHeight(50);
    this->addDockWidget(Qt::BottomDockWidgetArea, pOutputDock->GetDock());
    pOutputDock->setMinimumHeight(0);*/

    const auto pDefineList = new AssetList();
    pDefineList->setMinimumWidth(150);
    this->addDockWidget(Qt::LeftDockWidgetArea, pDefineList);
    pDefineList->setMinimumHeight(0);
    pDefineList->setWindowTitle("Define");

    const auto pDeclareList = new AssetList();
    pDeclareList->setMinimumWidth(150);
    this->addDockWidget(Qt::LeftDockWidgetArea, pDeclareList);
    pDeclareList->setMinimumHeight(0);
    pDeclareList->setWindowTitle("Declare");

    QMainWindow::tabifyDockWidget(pDefineList, pDeclareList);

    connect( ui->actionToggleDark, &QAction::triggered, [=](bool checked){
        if( checked ) {
            EnableThemeDark();
        } else {
            EnableThemeLight();
        }
    });
}

void MainWindow::EnableThemeDark()
{
    ui->actionToggleDark->setIcon(QIcon(":/icons/data/icons/alexandru.stoica/sun_star [#1268].svg"));

    //QFile file(":/css/data/css/style.qss");
    //QFile file(":/css/data/css/DarkMonokai.qss");
    QFile file(":/css/data/css/darkorange.qss");
    //QFile file(":/css/data/css/darkstyle.qss");
    //QFile file(":/css/data/css/QTDark.qss");
    //QFile file(":/dark.qss");
    file.open(QFile::ReadOnly | QFile::Text);
    QTextStream stream(&file);
    qApp->setStyleSheet(stream.readAll());

    auto& children = this->children();
    for( auto& child : children ) {
        QAction* action = qobject_cast<QAction*>(child);
        QAbstractButton* button = qobject_cast<QAbstractButton*>(child);
        if( action ) {
            auto icon = action->icon();
            auto pixmap = icon.pixmap(icon.actualSize(QSize(32,32)));
            const auto& mask = pixmap.createMaskFromColor(QColor("transparent"), Qt::MaskInColor);
            pixmap.fill(QColor("white"));
            pixmap.setMask(mask);
            action->setIcon(QIcon(pixmap));
        } else if( button ) {
            auto icon = button->icon();
            auto pixmap = icon.pixmap(icon.actualSize(QSize(32,32)));
            const auto& mask = pixmap.createMaskFromColor(QColor("transparent"), Qt::MaskInColor);
            pixmap.fill(QColor("white"));
            pixmap.setMask(mask);
            button->setIcon(QIcon(pixmap));
        }
    }

    //this->setWindowState(Qt::WindowMaximized);
}

void MainWindow::EnableThemeLight()
{
    ui->actionToggleDark->setIcon(QIcon(":/icons/data/icons/alexandru.stoica/moon [#1248].svg"));

    qApp->setStyleSheet("");

    //QFile file(":/light.qss");
    //file.open(QFile::ReadOnly | QFile::Text);
    //QTextStream stream(&file);
    //qApp->setStyleSheet(stream.readAll());

    auto& children = this->children();
    for( auto& child : children )
    {
        QAction* action = qobject_cast<QAction*>(child);
        if( action )
        {
            auto icon = action->icon();
            auto pixmap = icon.pixmap(icon.actualSize(QSize(32,32)));
            const auto& mask = pixmap.createMaskFromColor(QColor("transparent"), Qt::MaskInColor);
            pixmap.fill(QColor("black"));
            pixmap.setMask(mask);
            action->setIcon(QIcon(pixmap));
        }
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}
