#include "importeddataview.h"


ImportedDataView::ImportedDataView(ComponentTableModel* model, ProjectParamTableModel* projectParamModel, PCBMaterialModel* pcbMaterialModel, QWidget *parent)
    : QWidget{parent}, m_model(model), m_projectParamModel(projectParamModel), m_pcbMaterialModel(pcbMaterialModel)
{
    setUp();
}

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

void ImportedDataView::setWidgets(){
    m_tabWidget = new QTabWidget(this);
    m_projectParamPreview = new ProjectParamPreview(this);
    m_componentsPreview = new ComponentsPreview(m_model, this);
    m_pcbMaterialPreview = new PCBMaterialPreview(m_pcbMaterialModel, this);
    
    m_tabWidget->addTab(m_componentsPreview, "Компоненты");
    m_tabWidget->addTab(m_projectParamPreview, "Параметры проекта");
    m_tabWidget->addTab(m_pcbMaterialPreview, "Материалы платы");
    
    // Устанавливаем модель для ProjectParamPreview
    if (m_projectParamModel && m_projectParamPreview) {
        m_projectParamPreview->tableModel()->setProjectParams(m_projectParamModel->getData());
    }
    
    // PCBMaterialPreview использует модель, переданную из MainController
    // База данных уже установлена в MainController
    qDebug() << "ImportedDataView: PCBMaterialPreview создан с моделью:" << m_pcbMaterialModel;
}

void ImportedDataView::setUpLayout(){
    QVBoxLayout* mainLayout = new QVBoxLayout(this);
    mainLayout->addWidget(m_tabWidget);
    this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}

void ImportedDataView::setUpConnections(){
    // Подключаем сигнал изменения данных от ProjectParamPreview
    if (m_projectParamPreview) {
        connect(m_projectParamPreview, &ProjectParamPreview::projectParamChanged,
                this, &ImportedDataView::onDataChanged);
    }
}

void ImportedDataView::updateView()
{
    // Обновляем отображение компонентов
    if (m_componentsPreview) {
        m_componentsPreview->updateView();
    }
    
    // Обновляем отображение параметров проекта
    updateProjectParams();
    
    // Обновляем отображение материалов платы
    updatePCBMaterials();
}

void ImportedDataView::updateProjectParams()
{
    if (m_projectParamModel && m_projectParamPreview) {
        QList<ProjectParamTableData> data = m_projectParamModel->getData();
        qDebug() << "ImportedDataView: обновляем параметры проекта:" << data.size() << "параметров";
        m_projectParamPreview->tableModel()->setProjectParams(data);
    } else {
        qDebug() << "ImportedDataView: m_projectParamModel или m_projectParamPreview равен nullptr";
    }
}

void ImportedDataView::onDataChanged()
{
    updateProjectParams();
}

ComponentsPreview* ImportedDataView::getComponentsPreview() const
{
    return m_componentsPreview;
}

void ImportedDataView::updatePCBMaterials()
{
    if (m_pcbMaterialPreview) {
        m_pcbMaterialPreview->updateView();
        qDebug() << "ImportedDataView: обновлены материалы платы";
    } else {
        qDebug() << "ImportedDataView: m_pcbMaterialPreview равен nullptr";
    }
}

PCBMaterialPreview* ImportedDataView::getPCBMaterialPreview() const
{
    return m_pcbMaterialPreview;
}
