#include "sensorlayout.h"

SensorLayout::SensorLayout(QWidget *parent)
    : QLayout(parent)
{}

SensorLayout::~SensorLayout()
{
    while (!items.isEmpty())
        delete items.takeFirst();
}

void SensorLayout::addItem(QLayoutItem *item)
{
    items.append(item);
}

QSize SensorLayout::sizeHint() const
{
    return QSize(400, 400); // Базовый размер
}

QSize SensorLayout::minimumSize() const
{
    return QSize(200, 200); // Минимальный размер
}

int SensorLayout::count() const
{
    return items.size();
}

QLayoutItem *SensorLayout::itemAt(int index) const
{
    return items.value(index);
}

QLayoutItem *SensorLayout::takeAt(int index)
{
    if (index >= 0 && index < items.size())
        return items.takeAt(index);
    return nullptr;
}

void SensorLayout::setGeometry(const QRect &rect)
{
    QLayout::setGeometry(rect);

    int x = spacing;             // Отступ слева
    int y = spacing;             // Отступ сверху
    int maxWidth = rect.width(); // Максимальная ширина доступного пространства
    int rowHeight = 0;           // Высота текущей строки

    for (QLayoutItem *item : qAsConst(items)) {
        QSize itemSize = item->sizeHint();

        // Проверяем, помещается ли элемент в текущую строку
        if (x + itemSize.width() > maxWidth - spacing) {
            // Переход на новую строку
            x = spacing;              // Сбрасываем горизонтальное положение
            y += rowHeight + spacing; // Увеличиваем вертикальное положение
            rowHeight = 0;            // Сбрасываем высоту строки
        }

        // Устанавливаем элемент
        item->setGeometry(QRect(QPoint(x, y), itemSize));

        // Обновляем `x` для следующего элемента
        x += itemSize.width() + spacing;

        // Высота строки обновляется, если текущий элемент выше
        rowHeight = qMax(rowHeight, itemSize.height());
    }
}
