__all__ = ["PropertyType", "Property"]


class PropertyType(object):
    pass


class Property(object):
    class Select(PropertyType):
        """
        Select Property. The user can select value from list set as options parameter
        """

        def __init__(self, label, options, description=""):
            """

            :param label:
            :param options:
            :param description:
            """
            PropertyType.__init__(self)
            self.label = label
            self.options = options
            self.description = description

    class Number(PropertyType):
        """
        The user can set a number value
        """

        def __init__(
            self, label, configurable=False, default_value=None, unit="", description=""
        ):
            """

            :param label:
            :param configurable:
            :param default_value:
            :param unit:
            :param description:
            """
            PropertyType.__init__(self)
            self.label = label
            self.configurable = configurable
            self.default_value = default_value
            self.description = description

    class Text(PropertyType):
        """
        The user can set a text value
        """

        def __init__(self, label, configurable=False, default_value="", description=""):
            """

            :param label:
            :param configurable:
            :param default_value:
            :param description:
            """
            PropertyType.__init__(self)
            self.label = label
            self.configurable = configurable
            self.default_value = default_value
            self.description = description

    class Actor(PropertyType):
        """
        The user select an actor which is available in the system. The value of this variable will be the actor id
        """

        def __init__(self, label, description=""):
            """

            :param label:
            :param description:
            """
            PropertyType.__init__(self)
            self.label = label
            self.configurable = True
            self.description = description

    class Sensor(PropertyType):
        """
        The user select a sensor which is available in the system. The value of this variable will be the sensor id
        """

        def __init__(self, label, description=""):
            """

            :param label:
            :param description:
            """
            PropertyType.__init__(self)
            self.label = label
            self.configurable = True
            self.description = description

    class Kettle(PropertyType):
        """
        The user select a kettle which is available in the system. The value of this variable will be the kettle id
        """

        def __init__(self, label, description=""):
            """

            :param label:
            :param description:
            """

            PropertyType.__init__(self)
            self.label = label
            self.configurable = True
            self.description = description

    class Fermenter(PropertyType):
        """
        The user select a fermenter which is available in the system. The value of this variable will be the fermenter id
        """

        def __init__(self, label, description=""):
            """

            :param label:
            :param description:
            """

            PropertyType.__init__(self)
            self.label = label
            self.configurable = True
            self.description = description
