#ifndef VIRTUALSQLTREENODEADAPTER_HPP
#define VIRTUALSQLTREENODEADAPTER_HPP

#include "virtualsqltreenodeadapter.h"

#include "../sqltreenode/sqltreenode.h"

template <typename DataType>
inline VirtualSqlTreeNodeAdapter<DataType>::VirtualSqlTreeNodeAdapter(
    SqlTreeNode &root)
    : m_root(root) {}

template <typename DataType>
inline QVariant VirtualSqlTreeNodeAdapter<DataType>::data(void *item,
                                                          int role) {
  auto value = getValue(item);
  if (role == Qt::DisplayRole) {
    return QVariant::fromValue(value->data);
  } else {
    return QVariant();
  }
}

template <typename DataType>
inline void *VirtualSqlTreeNodeAdapter<DataType>::getItemParent(void *item) {
  return item ? reinterpret_cast<SqlTreeNode *>(item)->parent : nullptr;
}

template <typename DataType>
inline void *VirtualSqlTreeNodeAdapter<DataType>::getItem(void *parent,
                                                          int index) {
  return getValue(parent)->nestedNodes[index].get();
}

template <typename DataType>
inline typename VirtualSqlTreeNodeAdapter<DataType>::SqlTreeNode *
VirtualSqlTreeNodeAdapter<DataType>::getValue(void *data) {
  return data ? static_cast<SqlTreeNode *>(data) : &m_root;
}

template <typename DataType>
inline int VirtualSqlTreeNodeAdapter<DataType>::getItemsCount(void *parent) {
  return static_cast<int>(getValue(parent)->nestedNodes.size());
}

#endif // VIRTUALSQLTREENODEADAPTER_HPP
