#ifndef PERECHENTABLECONTROLLER_H
#define PERECHENTABLECONTROLLER_H

#include <QObject>
#include <QList>
#include <QStringList>
#include "../model/perechentablemodel.h"
#include "../model/designatormappingmodel.h"
#include "../model/projectsettingsmodel.h"

class ComponentModel;

class PerechenTableController : public QObject
{
    Q_OBJECT

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

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

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

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

        // Методы для работы с настройками
        void setColumnMappings(const QStringList &mappings);
        QStringList getColumnMappings() const;
        QStringList getAvailableProperties() const;
        
        // Метод для установки модели маппинга дезигнаторов
        void setDesignatorMappingModel(DesignatorMappingModel *mappingModel);
        
        // Метод для установки модели таблицы (для интеграции с PerechenProcessor)
        void setModel(PerechenTableModel *model);
        
        // Метод для установки модели настроек проекта
        void setProjectSettingsModel(ProjectSettingsModel *model);
        
        // Метод для оптимизации разрывов страниц
        void optimizePageBreaks();
        
        // Методы для работы с размером шрифта
        int getFontSize() const;
        void setFontSize(int fontSize);
        int getFontStretch() const;
        void setFontStretch(int stretch);

private:
        QString getComponentValue(ComponentModel *component, const QString &propertyName);
        QString parseExpression(ComponentModel *component, const QString &expression);
        QStringList collectPropertyNames();
        

        
        // Методы для группировки
        QString getComponentType(ComponentModel *component);
        
        // Метод для разделения десигнатора на буквенную и цифровую части
        QPair<QString, QString> splitDesignator(const QString &designator);

        // Метод для разделения длинных наименований на несколько строк
        QList<QString> splitLongDesignation(const QString &designation, const QString originalString="",ComponentModel *component = nullptr , int maxLength = 60);
        
        // Вспомогательный метод для разделения текста по пробелам
        QList<QString> splitBySpaces(const QString &text, int maxLength);
        
        // Вспомогательный метод для разделения комплексной строки (с запятыми) по середине
        QList<QString> splitComplexStringByMiddle(const QString &text, int maxLength);

        PerechenTableModel *m_tableModel;
        DesignatorMappingModel *m_designatorMappingModel;
        ProjectSettingsModel *m_projectSettingsModel;
        QList<ComponentModel*> m_components;
        QStringList m_columnMappings;
        QStringList m_propertyNames;
};

#endif // PERECHENTABLECONTROLLER_H 
