# coding: utf-8

"""
Copyright 2016 SmartBear Software

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

    Ref: https://github.com/swagger-api/swagger-codegen
"""

from datetime import datetime
from datetime import date
from pprint import pformat
from six import iteritems
import re
import json

from ..utils import sanitize_for_serialization

# type hinting support
from typing import TYPE_CHECKING
from typing import List
from typing import Dict

if TYPE_CHECKING:
    from . import AddressableEntityRef
    from . import AuthenticationSettings
    from . import CobrowseSettings
    from . import CustomI18nLabels
    from . import JourneyEventsSettings
    from . import MessengerSettings
    from . import PositionSettings
    from . import SupportCenterSettings
    from . import WebDeploymentHeadlessMode

class WebDeploymentConfigurationVersionResponse(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self) -> None:
        """
        WebDeploymentConfigurationVersionResponse - a model defined in Swagger

        :param dict swaggerTypes: The key is attribute name
                                  and the value is attribute type.
        :param dict attributeMap: The key is attribute name
                                  and the value is json key in definition.
        """
        self.swagger_types = {
            'id': 'str',
            'name': 'str',
            'version': 'str',
            'headless_mode': 'WebDeploymentHeadlessMode',
            'description': 'str',
            'languages': 'list[str]',
            'default_language': 'str',
            'custom_i18n_labels': 'list[CustomI18nLabels]',
            'messenger': 'MessengerSettings',
            'position': 'PositionSettings',
            'support_center': 'SupportCenterSettings',
            'cobrowse': 'CobrowseSettings',
            'journey_events': 'JourneyEventsSettings',
            'authentication_settings': 'AuthenticationSettings',
            'date_created': 'datetime',
            'date_modified': 'datetime',
            'date_published': 'datetime',
            'last_modified_user': 'AddressableEntityRef',
            'created_user': 'AddressableEntityRef',
            'published_user': 'AddressableEntityRef',
            'status': 'str',
            'self_uri': 'str'
        }

        self.attribute_map = {
            'id': 'id',
            'name': 'name',
            'version': 'version',
            'headless_mode': 'headlessMode',
            'description': 'description',
            'languages': 'languages',
            'default_language': 'defaultLanguage',
            'custom_i18n_labels': 'customI18nLabels',
            'messenger': 'messenger',
            'position': 'position',
            'support_center': 'supportCenter',
            'cobrowse': 'cobrowse',
            'journey_events': 'journeyEvents',
            'authentication_settings': 'authenticationSettings',
            'date_created': 'dateCreated',
            'date_modified': 'dateModified',
            'date_published': 'datePublished',
            'last_modified_user': 'lastModifiedUser',
            'created_user': 'createdUser',
            'published_user': 'publishedUser',
            'status': 'status',
            'self_uri': 'selfUri'
        }

        self._id = None
        self._name = None
        self._version = None
        self._headless_mode = None
        self._description = None
        self._languages = None
        self._default_language = None
        self._custom_i18n_labels = None
        self._messenger = None
        self._position = None
        self._support_center = None
        self._cobrowse = None
        self._journey_events = None
        self._authentication_settings = None
        self._date_created = None
        self._date_modified = None
        self._date_published = None
        self._last_modified_user = None
        self._created_user = None
        self._published_user = None
        self._status = None
        self._self_uri = None

    @property
    def id(self) -> str:
        """
        Gets the id of this WebDeploymentConfigurationVersionResponse.
        The configuration version ID

        :return: The id of this WebDeploymentConfigurationVersionResponse.
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id: str) -> None:
        """
        Sets the id of this WebDeploymentConfigurationVersionResponse.
        The configuration version ID

        :param id: The id of this WebDeploymentConfigurationVersionResponse.
        :type: str
        """
        

        self._id = id

    @property
    def name(self) -> str:
        """
        Gets the name of this WebDeploymentConfigurationVersionResponse.
        The configuration version name

        :return: The name of this WebDeploymentConfigurationVersionResponse.
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name: str) -> None:
        """
        Sets the name of this WebDeploymentConfigurationVersionResponse.
        The configuration version name

        :param name: The name of this WebDeploymentConfigurationVersionResponse.
        :type: str
        """
        

        self._name = name

    @property
    def version(self) -> str:
        """
        Gets the version of this WebDeploymentConfigurationVersionResponse.
        The version of the configuration

        :return: The version of this WebDeploymentConfigurationVersionResponse.
        :rtype: str
        """
        return self._version

    @version.setter
    def version(self, version: str) -> None:
        """
        Sets the version of this WebDeploymentConfigurationVersionResponse.
        The version of the configuration

        :param version: The version of this WebDeploymentConfigurationVersionResponse.
        :type: str
        """
        

        self._version = version

    @property
    def headless_mode(self) -> 'WebDeploymentHeadlessMode':
        """
        Gets the headless_mode of this WebDeploymentConfigurationVersionResponse.
        Headless Mode Support which Controls UI components. When enabled, native UI components will be disabled and allows for custom-built UI.

        :return: The headless_mode of this WebDeploymentConfigurationVersionResponse.
        :rtype: WebDeploymentHeadlessMode
        """
        return self._headless_mode

    @headless_mode.setter
    def headless_mode(self, headless_mode: 'WebDeploymentHeadlessMode') -> None:
        """
        Sets the headless_mode of this WebDeploymentConfigurationVersionResponse.
        Headless Mode Support which Controls UI components. When enabled, native UI components will be disabled and allows for custom-built UI.

        :param headless_mode: The headless_mode of this WebDeploymentConfigurationVersionResponse.
        :type: WebDeploymentHeadlessMode
        """
        

        self._headless_mode = headless_mode

    @property
    def description(self) -> str:
        """
        Gets the description of this WebDeploymentConfigurationVersionResponse.
        The description of the configuration

        :return: The description of this WebDeploymentConfigurationVersionResponse.
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description: str) -> None:
        """
        Sets the description of this WebDeploymentConfigurationVersionResponse.
        The description of the configuration

        :param description: The description of this WebDeploymentConfigurationVersionResponse.
        :type: str
        """
        

        self._description = description

    @property
    def languages(self) -> List[str]:
        """
        Gets the languages of this WebDeploymentConfigurationVersionResponse.
        A list of languages supported on the configuration required if the messenger is enabled

        :return: The languages of this WebDeploymentConfigurationVersionResponse.
        :rtype: list[str]
        """
        return self._languages

    @languages.setter
    def languages(self, languages: List[str]) -> None:
        """
        Sets the languages of this WebDeploymentConfigurationVersionResponse.
        A list of languages supported on the configuration required if the messenger is enabled

        :param languages: The languages of this WebDeploymentConfigurationVersionResponse.
        :type: list[str]
        """
        

        self._languages = languages

    @property
    def default_language(self) -> str:
        """
        Gets the default_language of this WebDeploymentConfigurationVersionResponse.
        The default language to use for the configuration required if the messenger is enabled

        :return: The default_language of this WebDeploymentConfigurationVersionResponse.
        :rtype: str
        """
        return self._default_language

    @default_language.setter
    def default_language(self, default_language: str) -> None:
        """
        Sets the default_language of this WebDeploymentConfigurationVersionResponse.
        The default language to use for the configuration required if the messenger is enabled

        :param default_language: The default_language of this WebDeploymentConfigurationVersionResponse.
        :type: str
        """
        

        self._default_language = default_language

    @property
    def custom_i18n_labels(self) -> List['CustomI18nLabels']:
        """
        Gets the custom_i18n_labels of this WebDeploymentConfigurationVersionResponse.
        The localization settings for homescreen app

        :return: The custom_i18n_labels of this WebDeploymentConfigurationVersionResponse.
        :rtype: list[CustomI18nLabels]
        """
        return self._custom_i18n_labels

    @custom_i18n_labels.setter
    def custom_i18n_labels(self, custom_i18n_labels: List['CustomI18nLabels']) -> None:
        """
        Sets the custom_i18n_labels of this WebDeploymentConfigurationVersionResponse.
        The localization settings for homescreen app

        :param custom_i18n_labels: The custom_i18n_labels of this WebDeploymentConfigurationVersionResponse.
        :type: list[CustomI18nLabels]
        """
        

        self._custom_i18n_labels = custom_i18n_labels

    @property
    def messenger(self) -> 'MessengerSettings':
        """
        Gets the messenger of this WebDeploymentConfigurationVersionResponse.
        The settings for messenger

        :return: The messenger of this WebDeploymentConfigurationVersionResponse.
        :rtype: MessengerSettings
        """
        return self._messenger

    @messenger.setter
    def messenger(self, messenger: 'MessengerSettings') -> None:
        """
        Sets the messenger of this WebDeploymentConfigurationVersionResponse.
        The settings for messenger

        :param messenger: The messenger of this WebDeploymentConfigurationVersionResponse.
        :type: MessengerSettings
        """
        

        self._messenger = messenger

    @property
    def position(self) -> 'PositionSettings':
        """
        Gets the position of this WebDeploymentConfigurationVersionResponse.
        The settings for position

        :return: The position of this WebDeploymentConfigurationVersionResponse.
        :rtype: PositionSettings
        """
        return self._position

    @position.setter
    def position(self, position: 'PositionSettings') -> None:
        """
        Sets the position of this WebDeploymentConfigurationVersionResponse.
        The settings for position

        :param position: The position of this WebDeploymentConfigurationVersionResponse.
        :type: PositionSettings
        """
        

        self._position = position

    @property
    def support_center(self) -> 'SupportCenterSettings':
        """
        Gets the support_center of this WebDeploymentConfigurationVersionResponse.
        The settings for support center

        :return: The support_center of this WebDeploymentConfigurationVersionResponse.
        :rtype: SupportCenterSettings
        """
        return self._support_center

    @support_center.setter
    def support_center(self, support_center: 'SupportCenterSettings') -> None:
        """
        Sets the support_center of this WebDeploymentConfigurationVersionResponse.
        The settings for support center

        :param support_center: The support_center of this WebDeploymentConfigurationVersionResponse.
        :type: SupportCenterSettings
        """
        

        self._support_center = support_center

    @property
    def cobrowse(self) -> 'CobrowseSettings':
        """
        Gets the cobrowse of this WebDeploymentConfigurationVersionResponse.
        The settings for cobrowse

        :return: The cobrowse of this WebDeploymentConfigurationVersionResponse.
        :rtype: CobrowseSettings
        """
        return self._cobrowse

    @cobrowse.setter
    def cobrowse(self, cobrowse: 'CobrowseSettings') -> None:
        """
        Sets the cobrowse of this WebDeploymentConfigurationVersionResponse.
        The settings for cobrowse

        :param cobrowse: The cobrowse of this WebDeploymentConfigurationVersionResponse.
        :type: CobrowseSettings
        """
        

        self._cobrowse = cobrowse

    @property
    def journey_events(self) -> 'JourneyEventsSettings':
        """
        Gets the journey_events of this WebDeploymentConfigurationVersionResponse.
        The settings for journey events

        :return: The journey_events of this WebDeploymentConfigurationVersionResponse.
        :rtype: JourneyEventsSettings
        """
        return self._journey_events

    @journey_events.setter
    def journey_events(self, journey_events: 'JourneyEventsSettings') -> None:
        """
        Sets the journey_events of this WebDeploymentConfigurationVersionResponse.
        The settings for journey events

        :param journey_events: The journey_events of this WebDeploymentConfigurationVersionResponse.
        :type: JourneyEventsSettings
        """
        

        self._journey_events = journey_events

    @property
    def authentication_settings(self) -> 'AuthenticationSettings':
        """
        Gets the authentication_settings of this WebDeploymentConfigurationVersionResponse.
        The settings for authenticated deployments

        :return: The authentication_settings of this WebDeploymentConfigurationVersionResponse.
        :rtype: AuthenticationSettings
        """
        return self._authentication_settings

    @authentication_settings.setter
    def authentication_settings(self, authentication_settings: 'AuthenticationSettings') -> None:
        """
        Sets the authentication_settings of this WebDeploymentConfigurationVersionResponse.
        The settings for authenticated deployments

        :param authentication_settings: The authentication_settings of this WebDeploymentConfigurationVersionResponse.
        :type: AuthenticationSettings
        """
        

        self._authentication_settings = authentication_settings

    @property
    def date_created(self) -> datetime:
        """
        Gets the date_created of this WebDeploymentConfigurationVersionResponse.
        The date the configuration version was created. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss[.mmm]Z

        :return: The date_created of this WebDeploymentConfigurationVersionResponse.
        :rtype: datetime
        """
        return self._date_created

    @date_created.setter
    def date_created(self, date_created: datetime) -> None:
        """
        Sets the date_created of this WebDeploymentConfigurationVersionResponse.
        The date the configuration version was created. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss[.mmm]Z

        :param date_created: The date_created of this WebDeploymentConfigurationVersionResponse.
        :type: datetime
        """
        

        self._date_created = date_created

    @property
    def date_modified(self) -> datetime:
        """
        Gets the date_modified of this WebDeploymentConfigurationVersionResponse.
        The date the configuration version was most recently modified. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss[.mmm]Z

        :return: The date_modified of this WebDeploymentConfigurationVersionResponse.
        :rtype: datetime
        """
        return self._date_modified

    @date_modified.setter
    def date_modified(self, date_modified: datetime) -> None:
        """
        Sets the date_modified of this WebDeploymentConfigurationVersionResponse.
        The date the configuration version was most recently modified. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss[.mmm]Z

        :param date_modified: The date_modified of this WebDeploymentConfigurationVersionResponse.
        :type: datetime
        """
        

        self._date_modified = date_modified

    @property
    def date_published(self) -> datetime:
        """
        Gets the date_published of this WebDeploymentConfigurationVersionResponse.
        The date the configuration version was most recently published. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss[.mmm]Z

        :return: The date_published of this WebDeploymentConfigurationVersionResponse.
        :rtype: datetime
        """
        return self._date_published

    @date_published.setter
    def date_published(self, date_published: datetime) -> None:
        """
        Sets the date_published of this WebDeploymentConfigurationVersionResponse.
        The date the configuration version was most recently published. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss[.mmm]Z

        :param date_published: The date_published of this WebDeploymentConfigurationVersionResponse.
        :type: datetime
        """
        

        self._date_published = date_published

    @property
    def last_modified_user(self) -> 'AddressableEntityRef':
        """
        Gets the last_modified_user of this WebDeploymentConfigurationVersionResponse.
        A reference to the user who most recently modified the configuration version

        :return: The last_modified_user of this WebDeploymentConfigurationVersionResponse.
        :rtype: AddressableEntityRef
        """
        return self._last_modified_user

    @last_modified_user.setter
    def last_modified_user(self, last_modified_user: 'AddressableEntityRef') -> None:
        """
        Sets the last_modified_user of this WebDeploymentConfigurationVersionResponse.
        A reference to the user who most recently modified the configuration version

        :param last_modified_user: The last_modified_user of this WebDeploymentConfigurationVersionResponse.
        :type: AddressableEntityRef
        """
        

        self._last_modified_user = last_modified_user

    @property
    def created_user(self) -> 'AddressableEntityRef':
        """
        Gets the created_user of this WebDeploymentConfigurationVersionResponse.
        A reference to the user who created the configuration version

        :return: The created_user of this WebDeploymentConfigurationVersionResponse.
        :rtype: AddressableEntityRef
        """
        return self._created_user

    @created_user.setter
    def created_user(self, created_user: 'AddressableEntityRef') -> None:
        """
        Sets the created_user of this WebDeploymentConfigurationVersionResponse.
        A reference to the user who created the configuration version

        :param created_user: The created_user of this WebDeploymentConfigurationVersionResponse.
        :type: AddressableEntityRef
        """
        

        self._created_user = created_user

    @property
    def published_user(self) -> 'AddressableEntityRef':
        """
        Gets the published_user of this WebDeploymentConfigurationVersionResponse.
        A reference to the user who published the configuration version

        :return: The published_user of this WebDeploymentConfigurationVersionResponse.
        :rtype: AddressableEntityRef
        """
        return self._published_user

    @published_user.setter
    def published_user(self, published_user: 'AddressableEntityRef') -> None:
        """
        Sets the published_user of this WebDeploymentConfigurationVersionResponse.
        A reference to the user who published the configuration version

        :param published_user: The published_user of this WebDeploymentConfigurationVersionResponse.
        :type: AddressableEntityRef
        """
        

        self._published_user = published_user

    @property
    def status(self) -> str:
        """
        Gets the status of this WebDeploymentConfigurationVersionResponse.
        The current status of the configuration version

        :return: The status of this WebDeploymentConfigurationVersionResponse.
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status: str) -> None:
        """
        Sets the status of this WebDeploymentConfigurationVersionResponse.
        The current status of the configuration version

        :param status: The status of this WebDeploymentConfigurationVersionResponse.
        :type: str
        """
        allowed_values = ["Pending", "Active", "Inactive", "Error", "Deleting"]
        if status.lower() not in map(str.lower, allowed_values):
            # print("Invalid value for status -> " + status)
            self._status = "outdated_sdk_version"
        else:
            self._status = status

    @property
    def self_uri(self) -> str:
        """
        Gets the self_uri of this WebDeploymentConfigurationVersionResponse.
        The URI for this object

        :return: The self_uri of this WebDeploymentConfigurationVersionResponse.
        :rtype: str
        """
        return self._self_uri

    @self_uri.setter
    def self_uri(self, self_uri: str) -> None:
        """
        Sets the self_uri of this WebDeploymentConfigurationVersionResponse.
        The URI for this object

        :param self_uri: The self_uri of this WebDeploymentConfigurationVersionResponse.
        :type: str
        """
        

        self._self_uri = self_uri

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

        for attr, _ in iteritems(self.swagger_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_json(self):
        """
        Returns the model as raw JSON
        """
        return json.dumps(sanitize_for_serialization(self.to_dict()))

    def to_str(self):
        """
        Returns the string representation of the model
        """
        return 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
        """
        return self.__dict__ == other.__dict__

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

