#include <TrainingDataDialog.h>

TrainingDataDialog::TrainingDataDialog()
{
    howMuch1 = new QLabel(tr("Training Data Set 1 Size"));
    inputSize1 = new QLineEdit();

    howMuch2 = new QLabel(tr("Training Data Set 2 Size"));
    inputSize2 = new QLineEdit();

    QIntValidator *val = new QIntValidator(0, 1000, this);

    inputSize1->setValidator(val);
    inputSize2->setValidator(val);

    add = new QPushButton(tr("Set Data"));
    update = new QPushButton(tr("Update"));

    connect(update, SIGNAL(clicked()), this, SLOT(updateDialog()));
    connect(add, SIGNAL(clicked()), this, SLOT(addData()));

    QHBoxLayout *firstLine = new QHBoxLayout();
    firstLine->addWidget(howMuch1);
    firstLine->addWidget(inputSize1);

    QHBoxLayout *secondLine = new QHBoxLayout();
    secondLine->addWidget(howMuch2);
    secondLine->addWidget(inputSize2);

    v = new QVBoxLayout();
    v->addLayout(firstLine);
    v->addLayout(secondLine);
    v->addWidget(update);
    v->addWidget(add);

    this->setLayout(v);

}

TrainingDataDialog::~TrainingDataDialog()
{

}

void TrainingDataDialog::setDataSize()
{

}

void TrainingDataDialog::updateDialog()
{
    int size1 = inputSize1->text().toInt();
    int size2 = inputSize2->text().toInt();

    if(size1 != size2)
    {
        QMessageBox::information(0, QString("Invalid input"), QString("The sizes of the training data must match"));
    }
    else
    {
        for(int i = 0; i < size1; i++)
        {
            QLabel *l = new QLabel(QString::number(i));
            labelList1.append(l);
            QLineEdit *e = new QLineEdit();
            inputList1.append(e);
        }
        for(int i = 0; i < size2; i++)
        {
            QLabel *ll = new QLabel(QString::number(i));
            labelList2.append(ll);
            QLineEdit *ee = new QLineEdit();
            inputList2.append(ee);
        }

        for(int i = 0; i < size1; i++)
        {
            QHBoxLayout *h = new QHBoxLayout();
            h->addWidget(labelList1[i]);
            h->addWidget(inputList1[i]);
            h->addWidget(labelList2[i]);
            h->addWidget(inputList2[i]);

            layoutList.append(h);
        }

        v->removeWidget(add);

        foreach(QHBoxLayout *k, layoutList)
        {
            v->addLayout(k);
        }

        v->addWidget(add);
    }
}

void TrainingDataDialog::addData()
{
    QList<float> set1;

    foreach(QLineEdit *e, inputList1)
    {
        set1.append(e->text().toFloat());
    }

    QList<float> set2;

    foreach(QLineEdit *e, inputList2)
    {
        set2.append(e->text().toFloat());
    }

    emit dataSet1(set1);
    emit dataSet2(set2);
    this->hide();
    this->close();
}
