#include "classoptions.h"
#include "ui_classoptions.h"
#include <QListWidget>
#include <QPushButton>
#include <QDebug>
#include <QMessageBox>

// erstellt den DIalog
//  seq: Die Sequenz, welche momentan annotiert wird
//  parent: Das Eltern QWidget von Qt
ClassOptions::ClassOptions( Sequenz *seq, QWidget *parent) :
    QDialog(parent),
    ui(new Ui::ClassOptions),
    seq( seq )
{
    ui->setupUi(this);
    setWindowTitle( "Klassen bearbeiten" );
    QList< Sequenz::SegmentationClass > classes = seq->getClasses();
    for( auto c = classes.begin(); c != classes.end(); c++ )
    {
        QListWidgetItem *item = new QListWidgetItem( c->name );
        item->setFlags(item->flags() | Qt::ItemIsEditable);
        items.append( { c->id, item } );
        ui->classList->addItem(item);
    }
}

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

// Erstellt eine neue Klasse von Objekten
void ClassOptions::on_newClass_clicked()
{
    QListWidgetItem *item = new QListWidgetItem("New Class");
    item->setFlags(item->flags() | Qt::ItemIsEditable);
    int id = seq->addClass(item->text());
    if( id == -1 )
    {
        delete item;
        QMessageBox messageBox;
        messageBox.critical(0,"Error","Es existiert bereits eine andere Klasse mit dem Namen '" + item->text() + "'.");
        messageBox.show();
        return;
    }
    items.append( { id, item } );
    ui->classList->addItem(item);
}

// Löscht eine Klasse von Objekten
void ClassOptions::on_removeClass_clicked()
{
    QList<QListWidgetItem*> items = ui->classList->selectedItems();
    foreach(QListWidgetItem *item, items){
        if( seq->removeClass( getItemId( item ) ) )
            ui->classList->removeItemWidget(item);
        else
        {
            QMessageBox messageBox;
            messageBox.critical(0,"Error","Die Klasse '" + item->text() + " konnte nicht gelöscht werden.");
            messageBox.show();
        }
    }
}

// Erlaubt das Klicken auf Löschen
void ClassOptions::on_classList_itemSelectionChanged()
{
    ui->removeClass->setEnabled( ui->classList->selectedItems().size() > 0 );
}

// Benennt die ausgewählte Klasse um
void ClassOptions::on_classList_itemChanged(QListWidgetItem *item)
{
    if( !seq->setClassName( getItemId( item ), item->text() ) )
    {
        QMessageBox messageBox;
        messageBox.critical(0,"Error","Es existiert bereits eine andere Klasse mit dem Namen '" + item->text() + "'.");
        messageBox.show();
        item->setText( seq->getClassName( getItemId( item ) ) );
    }
}

// Beendet das Verwalten der Klassen
void ClassOptions::on_fertig_clicked()
{
    this->close();
}

// Gibt den Index einer Klasse aus der Liste zurück
int ClassOptions::getItemId( QListWidgetItem *item )
{
    for( auto i = items.begin(); i != items.end(); i++ )
    {
        if( i->item == item )
            return i->id;
    }
    return -1;
}
