#include "cell.h"
#include <QPushButton>
#include <QToolButton>
#include <QDebug>
#include <QSignalMapper>
#include <QGridLayout>
#include <QStackedWidget>
#include <QGroupBox>

Cell::Cell(QWidget *parent) : QWidget(parent)
{
    mapper = new QSignalMapper(this);
    connect(mapper, SIGNAL(mapped(int)), this, SLOT(collapse(int)));

    groupBox = new QGroupBox();
    gridLayout = new QGridLayout();
    setStyleSheet("border: 1px solid #1e282c; border-radius: 0px;background-color:#52585d;");
    for (char i = 0; i < 9; i++)
    {
        states[i] = new QPushButton(QString::number(i + 1), this);
        gridLayout->addWidget(states[i], i / 3, i % 3);
        states[i]->setStyleSheet("border:none");
        connect(states[i], SIGNAL(clicked()), mapper, SLOT(map()));
        mapper->setMapping(states[i], i);
        blocked[i] = 0;
    }
    groupBox->setLayout(gridLayout);
    number = new QPushButton(this);

    connect(number, SIGNAL(clicked()), this, SLOT(collapsedCellClicked()));
    stackedWidget = new QStackedWidget(this);
    stackedWidget->addWidget(groupBox);
    stackedWidget->addWidget(number);
    setMinimumSize(70, 70);
}

void Cell::resizeEvent(QResizeEvent *event)
{
    QWidget::resizeEvent(event);
    stackedWidget->setFixedSize(this->size());
    int smallest = this->width() < this->height() ? this->width() : this->height();
    number->setStyleSheet("font-size:" + QString::number(smallest / 2) + "px;");
    return;
}

void Cell::collapse(int x)
{
    collapsed = true;
    stackedWidget->setCurrentIndex(1);
    number->setText(QString::number(x + 1));
    emit update(x);
}
void Cell::removeOption(int x)
{
    if (blocked[x] == 0)
    {
        states[x]->setText(" ");
        states[x]->setDisabled(true);
        possibleStates--;
    }
    blocked[x]++;
}

void Cell::addOption(int x)
{
    blocked[x]--;
    if (blocked[x] < 1)
    {
        states[x]->setText(QString::number(x + 1));
        states[x]->setDisabled(false);
        possibleStates++;
    }
}
void Cell::collapsedCellClicked(void)
{
    collapsed = false;
    stackedWidget->setCurrentIndex(0);
    emit undo(number->text().toInt() - 1);
}