/**
 * @file ForeignKeyDelegate.cpp
 * @brief Implementation of Qt styles
 */

#include "ForeignKeyDelegate.h"
#include "CandidateKeyFilter.h"

#include <QComboBox>

ForeignKeyDelegate::ForeignKeyDelegate(QAbstractItemModel *referenced_model,
                                       int referenced_key_column,
                                       QObject *parent, int referenced_key_role)
    : QStyledItemDelegate{parent}, candidate_key_filter_{new CandidateKeyFilter{
                                       referenced_model, referenced_key_column,
                                       nullptr, referenced_key_role}} {}

ForeignKeyDelegate::ForeignKeyDelegate(
    QAbstractItemModel *referenced_model,
    QAbstractItemModel const *referencing_model, int referenced_key_column,
    int referencing_key_column, QObject *parent, int referenced_key_role,
    int referencing_key_role)
    : QStyledItemDelegate{parent},
      candidate_key_filter_{new CandidateKeyFilter{
          referenced_model, referencing_model, referenced_key_column,
          referencing_key_column, nullptr, referenced_key_role,
          referencing_key_role}} {}

ForeignKeyDelegate::~ForeignKeyDelegate() {}

QWidget *
ForeignKeyDelegate::createEditor(QWidget *parent,
                                 QStyleOptionViewItem const & /* option */
                                 ,
                                 QModelIndex const &index) const {
    auto editor = new QComboBox{parent};
    editor->setFrame(false);
    candidate_key_filter_->set_active_key(index);
    editor->setModel(candidate_key_filter_.data());
    return editor;
}
