import sys

from PySide6.QtCore import QObject, Property, QLibraryInfo


class SomeObject(QObject):
    _value = 'ConstantValue'

    def __init__(self):
        super().__init__()
        self._readWriteInt = -1
        self._readWriteInt2 = -1

    @Property(int)
    def readOnlyInt2(self):
        return 10

    @Property(int, fset=None)
    def readOnlyInt3(self):
        return 10

    def readOnlyInt(self):
        return 10

    def readWriteInt(self):
        return self._readWriteInt

    def setReadWriteInt(self, v):
        print("setReadWriteInt(", v, ')')
        self._readWriteInt = v

    @Property(int)
    def readWriteInt2(self):
        return self._readWriteInt

    @readWriteInt2.setter
    def readWriteInt2(self, v):
        print("readWriteInt2(", v, ')')
        self._readWriteInt = v

    constantValue = Property(str, lambda self: self._value, constant=True)
    readOnlyInt = Property(int, readOnlyInt)
    readWriteInt = Property(int, readWriteInt, fset=setReadWriteInt)


if __name__ == '__main__':
    print('Python {}.{}.{}'.format(sys.version_info[0], sys.version_info[1],
                                   sys.version_info[2]))
    print(QLibraryInfo.build())
    obj = SomeObject()
    metaObject = obj.metaObject()
    props = ["constantValue", "readOnlyInt", "readOnlyInt2", "readOnlyInt3",
             "readWriteInt", "readWriteInt2"]
    for pn in props:
        i = metaObject.indexOfProperty(pn)
        mp = metaObject.property(i)
        print(i, mp.name(), "const=", mp.isConstant(), "writable=", mp.isWritable(),
              "resettable=", mp.isResettable(), "notify=", mp.notifySignalIndex())

    print("\n\nSetting obj.readWriteInt")
    obj.readWriteInt = 42
    print(obj.readWriteInt)
    print("\n\nSetting obj.readWriteInt2")
    obj.readWriteInt2 = 43
    print(obj.readWriteInt2)

    # print("\n\nSetting obj.readOnlyInt")
    # obj.readOnlyInt = 44

    print("\n\nSetting obj.readOnlyInt2")
    obj.readOnlyInt2 = 44
