#ifndef SIMPLELISTTABLECONTROLLER_H
#define SIMPLELISTTABLECONTROLLER_H

#include <QObject>
#include <QList>
#include <QStringList>
#include "../model/simplelisttablemodel.h"

class ComponentModel;

class SimpleListTableController : public QObject
{
    Q_OBJECT

public:
    explicit SimpleListTableController(QObject *parent = nullptr);
    ~SimpleListTableController();

    // Получение модели для отображения в UI
    SimpleListTableModel* getTableModel() const { return m_tableModel; }
    SimpleListTableModel* getModel() const { return m_tableModel; } // Алиас для совместимости

    // Методы для работы с компонентами
    void setComponents(const QList<ComponentModel*> &components);
    void generateTableFromComponents();
    void generateTableFromSpecificationPCB(class SpecificationPCBTableModel *specPCBModel); // Генерация из SpecificationPCB
    void updateTableFromComponents(); // Метод для обновления таблицы по кнопке

    // Новые методы для управления строками
    void addEmptyRow();
    void addEmptyRowAt(int position);
    void insertEmptyRowAt(int position); // Вставка строки в определенную позицию
    void removeRow(int row);
    void clearTable();

    // Метод для установки модели таблицы (для интеграции)
    void setModel(SimpleListTableModel *model);

    // Методы для работы с настройками
    void setNameField(const QString &fieldName);
    QString getNameField() const;
    void setTechReservePercent(int percent);
    int getTechReservePercent() const;
    void setBoardsCount(int count);
    int getBoardsCount() const;
    QStringList getAvailableProperties() const;

private:
    QString getComponentValue(ComponentModel *component, const QString &propertyName);
    QString parseExpression(ComponentModel *component, const QString &expression);
    QStringList collectPropertyNames();
    
    // Метод для разделения десигнатора на буквенную и цифровую части
    static QPair<QString, QString> splitDesignator(const QString &designator);

    SimpleListTableModel *m_tableModel;
    QList<ComponentModel*> m_components;
    QStringList m_propertyNames;
    QString m_nameField;      // Поле для наименования компонента (по умолчанию "Name")
    int m_techReservePercent; // Процент тех запаса (по умолчанию 10)
    int m_boardsCount;        // Кол-во плат (по умолчанию 1)
};

#endif // SIMPLELISTTABLECONTROLLER_H

