#include "pcbmaterialpreview.h"
#include <QDebug>

PCBMaterialPreview::PCBMaterialPreview(PCBMaterialModel* model, QWidget *parent)
    : QWidget(parent)
    , m_tableModel(model)
{
    setUp();
}

void PCBMaterialPreview::setUp()
{
    setWidgets();
    setUpLayout();
    setUpConnections();
}

void PCBMaterialPreview::setWidgets()
{
    // Если модель не передана, создаем новую
    if (!m_tableModel) {
        m_tableModel = new PCBMaterialModel(this);
    }
    
    m_tableView = new QTableView(this);
    m_layerCountLabel = new QLabel("Количество слоев: 0", this);
    
    // Настраиваем таблицу
    m_tableView->setModel(m_tableModel);
    m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    m_tableView->setSelectionMode(QAbstractItemView::SingleSelection);
    m_tableView->setAlternatingRowColors(true);
    m_tableView->setSortingEnabled(true);
    
    // Настраиваем заголовки
    m_tableView->horizontalHeader()->setStretchLastSection(true);
    m_tableView->horizontalHeader()->setSectionsClickable(true);
    m_tableView->verticalHeader()->setVisible(false);
    
    qDebug() << "PCBMaterialPreview: Виджет создан";
}

void PCBMaterialPreview::setUpLayout()
{
    QVBoxLayout* mainLayout = new QVBoxLayout(this);
    
    // Добавляем информацию о количестве слоев
    mainLayout->addWidget(m_layerCountLabel);
    
    // Добавляем таблицу
    mainLayout->addWidget(m_tableView);
    
    this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}

void PCBMaterialPreview::setUpConnections()
{
    // Подключаем сигналы выбора строк
    if (m_tableView) {
        connect(m_tableView->selectionModel(), &QItemSelectionModel::selectionChanged,
                [this](const QItemSelection &selected, const QItemSelection &deselected) {
            if (!selected.isEmpty()) {
                int row = selected.indexes().first().row();
                emit materialSelected(row);
            }
        });
        
        connect(m_tableView, &QTableView::doubleClicked,
                [this](const QModelIndex &index) {
            emit materialDoubleClicked(index.row());
        });
    }
}

void PCBMaterialPreview::updateView()
{
    if (m_tableModel) {
        m_tableModel->loadMaterials();
        int layerCount = m_tableModel->getLayerCount();
        int materialCount = m_tableModel->getMaterialCount();
        
        m_layerCountLabel->setText(QString("Количество слоев: %1 | Материалов: %2")
                                  .arg(layerCount).arg(materialCount));
        
        qDebug() << "PCBMaterialPreview: Обновлено отображение - слоев:" << layerCount
                 << "материалов:" << materialCount;
    } else {
        qDebug() << "PCBMaterialPreview: m_tableModel равен nullptr";
    }
}

void PCBMaterialPreview::setPCBMaterials(const QList<PCBMaterialData> &materials)
{
    if (m_tableModel) {
        // Этот метод может быть использован для программной установки данных
        // В текущей реализации данные загружаются из БД через loadMaterials()
        qDebug() << "PCBMaterialPreview: Установлено материалов:" << materials.size();
    }
}

void PCBMaterialPreview::setLayerCount(int layerCount)
{
    if (m_layerCountLabel) {
        m_layerCountLabel->setText(QString("Количество слоев: %1").arg(layerCount));
    }
}

void PCBMaterialPreview::clear()
{
    if (m_tableModel) {
        m_tableModel->clearMaterials();
        m_layerCountLabel->setText("Количество слоев: 0");
    }
}

PCBMaterialModel* PCBMaterialPreview::tableModel() const
{
    return m_tableModel;
} 