#include "cell.h"
#include <QPushButton>
#include <QDebug>
#include <QSignalMapper>

Cell::Cell(QWidget *parent) : QWidget(parent)
{
    // Set size of the window
    // Create and position the button
    setAutoFillBackground(true);
    setStyleSheet("background-color:gray;");
    setFixedSize(100, 100);
    float w = width() / 3.0;
    float h = height() / 3.0;
    QSignalMapper *mapper = new QSignalMapper(this);
    connect(mapper, SIGNAL(mapped(int)), this, SLOT(collapse(int)));
    for (char i = 0; i < 9; i++)
    {
        m_states[i] = new QPushButton(QString::number(i + 1), this);
        m_states[i]->setGeometry(i % 3 * w, i / 3 * h, w, h);
        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;
    }
    m_number = new QPushButton(this);
    m_number->setFixedSize(100, 100);
    m_number->setStyleSheet("font-size:44px");
    m_number->hide();

    connect(m_number,SIGNAL(clicked()),this,SLOT(un()));
}

void Cell::collapse(int x)
{
    collapsed = true;
    m_number->show();
    m_number->setText(QString::number(x + 1));
    emit(update(x));
}
void Cell::removeOption(int x)
{
    // states[x]->hide();
    if (m_states[x]->isEnabled())
    {
        m_states[x]->setDisabled(true);
        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]->setDisabled(false);
        possibleStates++;
        index.push_back(x);
    }
}
void Cell::un(void){
    collapsed = false;
    m_number->hide();
    emit(undo(m_number->text().toInt()-1));
}