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

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

    QGroupBox *groupBox = new QGroupBox();
    QGridLayout *layout = new QGridLayout();
    for (char i = 0; i < 9; i++)
    {
        m_states[i] = new QPushButton(QString::number(i + 1), this);
        layout->addWidget(m_states[i], i % 3, i / 3);
        m_states[i]->setStyleSheet("border:none");
        connect(m_states[i], SIGNAL(clicked()), mapper, SLOT(map()));
        mapper->setMapping(m_states[i], i);
        m_blocked[i] = 0;
    }
    groupBox->setLayout(layout);
    m_number = new QPushButton(this);

    connect(m_number, SIGNAL(clicked()), this, SLOT(un()));
    m_stackedWidget = new QStackedWidget(this);
    m_stackedWidget->addWidget(groupBox);
    m_stackedWidget->addWidget(m_number);
    setMinimumSize(70, 70);
}

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

void Cell::collapse(int x)
{
    collapsed = true;
    m_stackedWidget->setCurrentIndex(1);
    m_number->setText(QString::number(x + 1));
    emit(update(x));
}
void Cell::removeOption(int x)
{
    if (m_blocked[x] == 0)
    {
        m_states[x]->setDisabled(true);
        m_states[x]->setText(" ");
        possibleStates--;
        index.erase(std::find(index.begin(), index.end(), x));
    }
    m_blocked[x]++;
}

void Cell::addOption(int x)
{
    m_blocked[x]--;
    // if (!m_states[x]->isEnabled())
    if (m_blocked[x] < 1)
    {
        m_states[x]->setText(QString::number(x + 1));
        m_states[x]->setDisabled(false);
        possibleStates++;
        index.push_back(x);
    }
}
void Cell::un(void)
{
    collapsed = false;
    m_stackedWidget->setCurrentIndex(0);
    emit(undo(m_number->text().toInt() - 1));
}