#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include <QApplication>
#include <QWidget>
#include <QTableView>
#include <QStandardItemModel>
#include <QVBoxLayout>
#include <QHeaderView>

#include <QSlider>
#include <QPainter>

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QSlider>
#include <QCheckBox>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QProxyStyle>
#include <QPainter>
#include <QStyleOptionSlider>
#include <QGraphicsDropShadowEffect>


class TableViewDemo : public QWidget
{
public:
  TableViewDemo()
  {
    setWindowTitle("QTableView mit QSlider Editor");
    resize(700, 400);

    auto* layout = new QVBoxLayout(this);

    // Model erstellen (3 Spalten, 10 Zeilen)
    auto* model = new QStandardItemModel(10, 2, this);

    // Header setzen
    model->setHorizontalHeaderLabels({"Name",  "Wert"});

    // Daten einfügen
    for (int row = 0; row < 10; ++row)
    {
      auto* nameItem = new QStandardItem(QString("Eintrag %1").arg(row + 1));
      auto* valueItem = new QStandardItem();

      // Wert-Item editierbar machen
      valueItem->setData(row * 10, Qt::EditRole);  // Startwert 0-90
      valueItem->setEditable(true);

      // Andere nicht editierbar
      nameItem->setEditable(false);


      model->setItem(row, 0, nameItem);
      model->setItem(row, 1, valueItem);
    }

    // TableView erstellen
    auto* tableView = new QTableView();
    tableView->setModel(model);

    // === SLIDER DELEGATE für Spalte 2 ===
    //auto* sliderDelegate = new SliderDelegate(this);
    //tableView->setItemDelegateForColumn(1, sliderDelegate);

    tableView->setAlternatingRowColors(false);
    // === LINIEN ENTFERNEN ===
    tableView->setShowGrid(false);

    // Header Style
    tableView->horizontalHeader()->setStyleSheet(R"(
            QHeaderView::section {
                background-color: #F5F5F5;
                padding: 10px;
                border: none;
                font-weight: bold;
                color: #333;
            }
        )");



    // Vertikaler Header ausblenden
    tableView->verticalHeader()->setVisible(false);

    // Alternating Row Colors
    //tableView->setAlternatingRowColors(true);

    // Style für TableView
    tableView->setStyleSheet(R"(
            QTableView
            {
                background-color: white;
                border: none;
                selection-background-color: #E3F2FD;
                selection-color: black;
            }
            QTableView::item
           {
                padding: 10px;
                border: none;
            }
       QTableView::item:selected {
        background-color: #E3F2FD;
        border: 1px solid #0078D4;  /* Rahmen um JEDE Zelle */
    }

            }
        )");


    // Spaltenbreite
    tableView->setColumnWidth(0, 50);
    tableView->setColumnWidth(1, 150);
    tableView->horizontalHeader()->setStretchLastSection(true);

    // Row Height für bessere Slider-Darstellung
    tableView->verticalHeader()->setDefaultSectionSize(40);

    // Selection
    tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    //tableView->setSelectionMode(QAbstractItemView::SingleSelection);

    // Edit Trigger - Klick zum Editieren
    tableView->setEditTriggers(QAbstractItemView::DoubleClicked |
                               QAbstractItemView::SelectedClicked);

    layout->addWidget(tableView);

    // Signal für Änderungen
    connect(model, &QStandardItemModel::dataChanged, this,
            [](const QModelIndex& topLeft, const QModelIndex& bottomRight) {
              if (topLeft.column() ==1) {
                int row = topLeft.row();
                int value = topLeft.data(Qt::DisplayRole).toInt();
                qDebug() << "Zeile" << row << "wurde auf" << value << "gesetzt";
              }
            });
  }
};

#endif // MAINWINDOW_H
