#include "manualdeembeddingdialog.h"

#include "ui_manualdeembeddingdialog.h"
#include "Traces/sparamtraceselector.h"
#include "CustomWidgets/informationbox.h"

ManualDeembeddingDialog::ManualDeembeddingDialog(const TraceModel &model, Deembedding *deemb) :
    ui(new Ui::ManualDeembeddingDialog)
{
    ui->setupUi(this);
    auto traceSelector = new SparamTraceSelector(model, deemb->getAffectedPorts(), true, 8);
    ui->verticalLayout->insertWidget(1, traceSelector, 1.0);
    ui->buttonBox->setEnabled(false);
    connect(traceSelector, &SparamTraceSelector::selectionValid, ui->buttonBox, &QDialogButtonBox::setEnabled);
    connect(ui->buttonBox, &QDialogButtonBox::accepted, [=]() {
        auto traces = traceSelector->getTraces();
        bool clearDeembedding = false;
        for(auto t : traces) {
            if(t.second->deembeddingAvailable()) {
                clearDeembedding = InformationBox::AskQuestion("Clear previous de-embedding data?", "At least one of the selected traces "
                                   "has already been de-embedded. Do you want to clear the old de-embedding data before applying the new de-embedding?", true);
                break;
            }
        }
        if(clearDeembedding) {
            for(auto t : traces) {
                if(t.second->deembeddingAvailable()) {
                    t.second->clearDeembedding();
                }
            }
        }
        deemb->Deembed(traceSelector->getTraces());
        accept();
    });
}

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