# -*- coding: utf-8 -*-
# gui/components/springs.py
"""Простые пружины для компоновок."""

from PySide6.QtWidgets import QWidget, QSizePolicy


class VSpring(QWidget):
    """Вертикальная пружина."""

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)

    def set_enabled(self, enabled: bool) -> None:
        self.setEnabled(enabled)

    def set_min_width(self, width: int) -> None:
        self.setMinimumWidth(width)

    def set_min_height(self, height: int) -> None:
        self.setMinimumHeight(height)

    def set_max_width(self, width: int) -> None:
        self.setMaximumWidth(width)

    def set_max_height(self, height: int) -> None:
        self.setMaximumHeight(height)

    def set_fixed_size(self, width: int, height: int) -> None:
        self.setMinimumSize(width, height)
        self.setMaximumSize(width, height)

    def set_tooltip(self, text: str) -> None:
        self.setToolTip(text)

    def set_size_policy(self, horizontal, vertical) -> None:
        self.setSizePolicy(horizontal, vertical)


class HSpring(QWidget):
    """Горизонтальная пружина."""

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)

    def set_enabled(self, enabled: bool) -> None:
        self.setEnabled(enabled)

    def set_min_width(self, width: int) -> None:
        self.setMinimumWidth(width)

    def set_min_height(self, height: int) -> None:
        self.setMinimumHeight(height)

    def set_max_width(self, width: int) -> None:
        self.setMaximumWidth(width)

    def set_max_height(self, height: int) -> None:
        self.setMaximumHeight(height)

    def set_fixed_size(self, width: int, height: int) -> None:
        self.setMinimumSize(width, height)
        self.setMaximumSize(width, height)

    def set_tooltip(self, text: str) -> None:
        self.setToolTip(text)

    def set_size_policy(self, horizontal, vertical) -> None:
        self.setSizePolicy(horizontal, vertical)





# ---------------------------------------------------------------------------
# Module workflow notes
# ---------------------------------------------------------------------------
#
# 1) Назначение модуля:
#    Простые пружины (spacer-виджеты) для вертикальной и горизонтальной
#    компоновки: VSpring растягивается вертикально, HSpring — горизонтально.
#
# 2) Зависимости модуля:
#    Импорты: QWidget, QSizePolicy (PySide6.QtWidgets)
#    Хост-класс / базовый класс: QWidget (не SContainer!)
#    Внешние библиотеки: PySide6 (обязательна)
#
# 3) Экспорт:
#    Класс VSpring — вертикальная пружина (Minimum × Expanding).
#    Класс HSpring — горизонтальная пружина (Expanding × Minimum).
#    Оба класса предоставляют стандартный API размеров:
#    set_enabled(), set_min/max_width/height(), set_fixed_size(),
#    set_tooltip(), set_size_policy().
#
# 4) Состояние (поля):
#    Нет собственных полей. Только наследованные от QWidget.
#
# 5) Последовательность действий и вызовов:
#    __init__(parent=None)
#      -> super().__init__(parent)
#      -> setSizePolicy(Minimum, Expanding) для VSpring
#      -> setSizePolicy(Expanding, Minimum) для HSpring
#
# 6) Побочные эффекты:
#    Нет — чистые пустые виджеты-распорки.
#
# 7) Границы ответственности:
#    Только распорка в layout. Не рисует, не обрабатывает события,
#    не подключается к theme_bus, не имеет стилей.
#
# 8) Обработка ошибок:
#    Нет обработки ошибок. Виджет пассивен.
#
# 9) Инварианты и контракты:
#    - VSpring всегда Expanding по вертикали, Minimum по горизонтали.
#    - HSpring всегда Expanding по горизонтали, Minimum по вертикали.
#
# 10) Правило сопровождения:
#     Не наследовать от SContainer — пружины должны быть максимально
#     лёгкими. Использовать для заполнения свободного пространства
#     в VContainer/HContainer.
