# coding: utf-8

"""
    Mozart platform API

    API for interacting with the Mozart platform.  # noqa: E501

    The version of the OpenAPI document: 0.2.0
    Contact: support@bang-olufsen.dk
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six

from datetime import datetime
from typing import List, Dict, Literal, Optional

from mozart_api.models.action import Action

from mozart_api.configuration import Configuration


class RemoteMenuItemProperties(object):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    openapi_types = {
        "action_list": "list[Action]",
        "scene_list": "list[str]",
        "disabled": "bool",
        "dynamic_list": "str",
        "first_child_menu_item_id": "str",
        "label": "str",
        "next_sibling_menu_item_id": "str",
        "parent_menu_item_id": "str",
    }

    attribute_map = {
        "action_list": "actionList",
        "scene_list": "sceneList",
        "disabled": "disabled",
        "dynamic_list": "dynamicList",
        "first_child_menu_item_id": "firstChildMenuItemId",
        "label": "label",
        "next_sibling_menu_item_id": "nextSiblingMenuItemId",
        "parent_menu_item_id": "parentMenuItemId",
    }

    def __init__(
        self,
        action_list: Optional[List[Action]] = None,
        scene_list: Optional[List[str]] = None,
        disabled: Optional[bool] = None,
        dynamic_list: Optional[str] = None,
        first_child_menu_item_id: Optional[str] = None,
        label: Optional[str] = None,
        next_sibling_menu_item_id: Optional[str] = None,
        parent_menu_item_id: Optional[str] = None,
        local_vars_configuration=None,
    ):  # noqa: E501
        """RemoteMenuItemProperties - a model defined in OpenAPI"""  # noqa: E501
        if local_vars_configuration is None:
            local_vars_configuration = Configuration()
        self.local_vars_configuration = local_vars_configuration

        self._action_list = None
        self._scene_list = None
        self._disabled = None
        self._dynamic_list = None
        self._first_child_menu_item_id = None
        self._label = None
        self._next_sibling_menu_item_id = None
        self._parent_menu_item_id = None
        self.discriminator = None

        if action_list is not None:
            self.action_list = action_list
        if scene_list is not None:
            self.scene_list = scene_list
        self.disabled = disabled
        self.dynamic_list = dynamic_list
        self.first_child_menu_item_id = first_child_menu_item_id
        self.label = label
        self.next_sibling_menu_item_id = next_sibling_menu_item_id
        self.parent_menu_item_id = parent_menu_item_id

    @property
    def action_list(self):
        # type: () -> List[Action]
        """Gets the action_list of this RemoteMenuItemProperties.  # noqa: E501

        An ordered list of Actions to run on the product  # noqa: E501

        :return: The action_list of this RemoteMenuItemProperties.  # noqa: E501
        :rtype: List[Action]
        """
        return self._action_list

    @action_list.setter
    def action_list(self, action_list):
        # type: (list[Action]) -> None
        """Sets the action_list of this RemoteMenuItemProperties.

        An ordered list of Actions to run on the product  # noqa: E501

        :param action_list: The action_list of this RemoteMenuItemProperties.  # noqa: E501
        :type action_list: list[Action]
        :rtype: None
        """

        self._action_list = action_list

    @property
    def scene_list(self):
        # type: () -> List[str]
        """Gets the scene_list of this RemoteMenuItemProperties.  # noqa: E501

        A list of scenes  # noqa: E501

        :return: The scene_list of this RemoteMenuItemProperties.  # noqa: E501
        :rtype: List[str]
        """
        return self._scene_list

    @scene_list.setter
    def scene_list(self, scene_list):
        # type: (list[str]) -> None
        """Sets the scene_list of this RemoteMenuItemProperties.

        A list of scenes  # noqa: E501

        :param scene_list: The scene_list of this RemoteMenuItemProperties.  # noqa: E501
        :type scene_list: list[str]
        :rtype: None
        """

        self._scene_list = scene_list

    @property
    def disabled(self):
        # type: () -> bool
        """Gets the disabled of this RemoteMenuItemProperties.  # noqa: E501


        :return: The disabled of this RemoteMenuItemProperties.  # noqa: E501
        :rtype: bool
        """
        return self._disabled

    @disabled.setter
    def disabled(self, disabled):
        # type: (bool) -> None
        """Sets the disabled of this RemoteMenuItemProperties.


        :param disabled: The disabled of this RemoteMenuItemProperties.  # noqa: E501
        :type disabled: bool
        :rtype: None
        """

        self._disabled = disabled

    @property
    def dynamic_list(self):
        # type: () -> str
        """Gets the dynamic_list of this RemoteMenuItemProperties.  # noqa: E501

        Let mozart create a dynamic list. This list will be attached as children to the menu item. If dynamicList is set it's not possible to change or manipulate any of the children because mozart can alter them at any given time   # noqa: E501

        :return: The dynamic_list of this RemoteMenuItemProperties.  # noqa: E501
        :rtype: str
        """
        return self._dynamic_list

    @dynamic_list.setter
    def dynamic_list(self, dynamic_list):
        # type: (str) -> None
        """Sets the dynamic_list of this RemoteMenuItemProperties.

        Let mozart create a dynamic list. This list will be attached as children to the menu item. If dynamicList is set it's not possible to change or manipulate any of the children because mozart can alter them at any given time   # noqa: E501

        :param dynamic_list: The dynamic_list of this RemoteMenuItemProperties.  # noqa: E501
        :type dynamic_list: str
        :rtype: None
        """
        allowed_values = [None, "none", "radioFavorites"]  # noqa: E501
        if (
            self.local_vars_configuration.client_side_validation
            and dynamic_list not in allowed_values
        ):  # noqa: E501
            raise ValueError(
                "Invalid value for `dynamic_list` ({0}), must be one of {1}".format(  # noqa: E501
                    dynamic_list, allowed_values
                )
            )

        self._dynamic_list = dynamic_list

    @property
    def first_child_menu_item_id(self):
        # type: () -> str
        """Gets the first_child_menu_item_id of this RemoteMenuItemProperties.  # noqa: E501

        ID of the first child menu item  # noqa: E501

        :return: The first_child_menu_item_id of this RemoteMenuItemProperties.  # noqa: E501
        :rtype: str
        """
        return self._first_child_menu_item_id

    @first_child_menu_item_id.setter
    def first_child_menu_item_id(self, first_child_menu_item_id):
        # type: (str) -> None
        """Sets the first_child_menu_item_id of this RemoteMenuItemProperties.

        ID of the first child menu item  # noqa: E501

        :param first_child_menu_item_id: The first_child_menu_item_id of this RemoteMenuItemProperties.  # noqa: E501
        :type first_child_menu_item_id: str
        :rtype: None
        """

        self._first_child_menu_item_id = first_child_menu_item_id

    @property
    def label(self):
        # type: () -> str
        """Gets the label of this RemoteMenuItemProperties.  # noqa: E501

        Alternative label, if omitted mozart will try its best  # noqa: E501

        :return: The label of this RemoteMenuItemProperties.  # noqa: E501
        :rtype: str
        """
        return self._label

    @label.setter
    def label(self, label):
        # type: (str) -> None
        """Sets the label of this RemoteMenuItemProperties.

        Alternative label, if omitted mozart will try its best  # noqa: E501

        :param label: The label of this RemoteMenuItemProperties.  # noqa: E501
        :type label: str
        :rtype: None
        """

        self._label = label

    @property
    def next_sibling_menu_item_id(self):
        # type: () -> str
        """Gets the next_sibling_menu_item_id of this RemoteMenuItemProperties.  # noqa: E501

        ID of the next sibling menu item  # noqa: E501

        :return: The next_sibling_menu_item_id of this RemoteMenuItemProperties.  # noqa: E501
        :rtype: str
        """
        return self._next_sibling_menu_item_id

    @next_sibling_menu_item_id.setter
    def next_sibling_menu_item_id(self, next_sibling_menu_item_id):
        # type: (str) -> None
        """Sets the next_sibling_menu_item_id of this RemoteMenuItemProperties.

        ID of the next sibling menu item  # noqa: E501

        :param next_sibling_menu_item_id: The next_sibling_menu_item_id of this RemoteMenuItemProperties.  # noqa: E501
        :type next_sibling_menu_item_id: str
        :rtype: None
        """

        self._next_sibling_menu_item_id = next_sibling_menu_item_id

    @property
    def parent_menu_item_id(self):
        # type: () -> str
        """Gets the parent_menu_item_id of this RemoteMenuItemProperties.  # noqa: E501

        ID of the parent menu item  # noqa: E501

        :return: The parent_menu_item_id of this RemoteMenuItemProperties.  # noqa: E501
        :rtype: str
        """
        return self._parent_menu_item_id

    @parent_menu_item_id.setter
    def parent_menu_item_id(self, parent_menu_item_id):
        # type: (str) -> None
        """Sets the parent_menu_item_id of this RemoteMenuItemProperties.

        ID of the parent menu item  # noqa: E501

        :param parent_menu_item_id: The parent_menu_item_id of this RemoteMenuItemProperties.  # noqa: E501
        :type parent_menu_item_id: str
        :rtype: None
        """

        self._parent_menu_item_id = parent_menu_item_id

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.openapi_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(
                    map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value)
                )
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(
                    map(
                        lambda item: (item[0], item[1].to_dict())
                        if hasattr(item[1], "to_dict")
                        else item,
                        value.items(),
                    )
                )
            else:
                result[attr] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, RemoteMenuItemProperties):
            return False

        return self.to_dict() == other.to_dict()

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        if not isinstance(other, RemoteMenuItemProperties):
            return True

        return self.to_dict() != other.to_dict()
