"""
Пример 1: Базовое использование ObservableProperty

Демонстрация основных возможностей ObservableProperty:
- Создание наблюдаемого свойства
- Установка и получение значения
- Использование операторов привязки >> и @
"""

import sys
from qtpy.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton
from qtmvvm import ObservableProperty


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Пример 1: Базовое использование ObservableProperty")
        
        # Создаваем наблюдаемое свойство
        self.name = ObservableProperty("Введите имя")
        
        # Виджеты
        self.label = QLabel()
        self.edit = QLineEdit()
        self.edit.setText("Начальное значение")
        
        # Кнопка для изменения свойства
        self.btn = QPushButton("Изменить свойство")
        self.btn.clicked.connect(self.change_property)
        
        # Привязка: свойство -> виджет (1-way)
        # При изменении свойства автоматически обновляется label
        self.name >> self.label
        
        # Привязка: свойство <-> виджет (2-way)
        # Изменения синхронизируются в обе стороны
        self.name @ self.edit
        
        # Компоновка
        layout = QVBoxLayout()
        layout.addWidget(QLabel("ObservableProperty (1-way к label):"))
        layout.addWidget(self.label)
        layout.addWidget(QLabel("ObservableProperty (2-way с edit):"))
        layout.addWidget(self.edit)
        layout.addWidget(self.btn)
        self.setLayout(layout)
        
    def change_property(self):
        """Изменяем значение свойства - label обновится автоматически"""
        self.name.value = f"Привет, {self.edit.text()}!"


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())
