# coding: utf-8
# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.


from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel  # noqa: F401
from oci.decorators import init_model_state_from_kwargs


@init_model_state_from_kwargs
class Resource(object):
    """
    Ticket Item
    """

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "DEV"
    REGION_DEV = "DEV"

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "SEA"
    REGION_SEA = "SEA"

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "INTEG_NEXT"
    REGION_INTEG_NEXT = "INTEG_NEXT"

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "INTEG_STABLE"
    REGION_INTEG_STABLE = "INTEG_STABLE"

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "PHX"
    REGION_PHX = "PHX"

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "IAD"
    REGION_IAD = "IAD"

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "EU_FRANKFURT_1"
    REGION_EU_FRANKFURT_1 = "EU_FRANKFURT_1"

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "UK_LONDON_1"
    REGION_UK_LONDON_1 = "UK_LONDON_1"

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "CA_TORONTO_1"
    REGION_CA_TORONTO_1 = "CA_TORONTO_1"

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "AP_TOKYO_1"
    REGION_AP_TOKYO_1 = "AP_TOKYO_1"

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "US_LANGLEY_1"
    REGION_US_LANGLEY_1 = "US_LANGLEY_1"

    #: A constant which can be used with the region property of a Resource.
    #: This constant has a value of "US_LUKE_1"
    REGION_US_LUKE_1 = "US_LUKE_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "DEV_1"
    AVAILABILITY_DOMAIN_DEV_1 = "DEV_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "DEV_2"
    AVAILABILITY_DOMAIN_DEV_2 = "DEV_2"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "DEV_3"
    AVAILABILITY_DOMAIN_DEV_3 = "DEV_3"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "INTEG_NEXT_1"
    AVAILABILITY_DOMAIN_INTEG_NEXT_1 = "INTEG_NEXT_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "INTEG_STABLE_1"
    AVAILABILITY_DOMAIN_INTEG_STABLE_1 = "INTEG_STABLE_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "SEA_AD_1"
    AVAILABILITY_DOMAIN_SEA_AD_1 = "SEA_AD_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "SEA_AD_2"
    AVAILABILITY_DOMAIN_SEA_AD_2 = "SEA_AD_2"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "SEA_AD_3"
    AVAILABILITY_DOMAIN_SEA_AD_3 = "SEA_AD_3"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "PHX_AD_1"
    AVAILABILITY_DOMAIN_PHX_AD_1 = "PHX_AD_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "PHX_AD_2"
    AVAILABILITY_DOMAIN_PHX_AD_2 = "PHX_AD_2"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "PHX_AD_3"
    AVAILABILITY_DOMAIN_PHX_AD_3 = "PHX_AD_3"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "IAD_AD_1"
    AVAILABILITY_DOMAIN_IAD_AD_1 = "IAD_AD_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "IAD_AD_2"
    AVAILABILITY_DOMAIN_IAD_AD_2 = "IAD_AD_2"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "IAD_AD_3"
    AVAILABILITY_DOMAIN_IAD_AD_3 = "IAD_AD_3"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "IAD_POP_1"
    AVAILABILITY_DOMAIN_IAD_POP_1 = "IAD_POP_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "IAD_POP_2"
    AVAILABILITY_DOMAIN_IAD_POP_2 = "IAD_POP_2"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "EU_FRANKFURT_1_AD_1"
    AVAILABILITY_DOMAIN_EU_FRANKFURT_1_AD_1 = "EU_FRANKFURT_1_AD_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "EU_FRANKFURT_1_AD_2"
    AVAILABILITY_DOMAIN_EU_FRANKFURT_1_AD_2 = "EU_FRANKFURT_1_AD_2"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "EU_FRANKFURT_1_AD_3"
    AVAILABILITY_DOMAIN_EU_FRANKFURT_1_AD_3 = "EU_FRANKFURT_1_AD_3"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "EU_FRANKFURT_1_POP_1"
    AVAILABILITY_DOMAIN_EU_FRANKFURT_1_POP_1 = "EU_FRANKFURT_1_POP_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "UK_LONDON_1_AD_1"
    AVAILABILITY_DOMAIN_UK_LONDON_1_AD_1 = "UK_LONDON_1_AD_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "UK_LONDON_1_AD_2"
    AVAILABILITY_DOMAIN_UK_LONDON_1_AD_2 = "UK_LONDON_1_AD_2"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "UK_LONDON_1_AD_3"
    AVAILABILITY_DOMAIN_UK_LONDON_1_AD_3 = "UK_LONDON_1_AD_3"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "UK_LONDON_1_POP_1"
    AVAILABILITY_DOMAIN_UK_LONDON_1_POP_1 = "UK_LONDON_1_POP_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "UK_LONDON_1_POP_2"
    AVAILABILITY_DOMAIN_UK_LONDON_1_POP_2 = "UK_LONDON_1_POP_2"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "CA_TORONTO_1_AD_1"
    AVAILABILITY_DOMAIN_CA_TORONTO_1_AD_1 = "CA_TORONTO_1_AD_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "CA_TORONTO_1_POP_1"
    AVAILABILITY_DOMAIN_CA_TORONTO_1_POP_1 = "CA_TORONTO_1_POP_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "AP_TOKYO_1_AD_1"
    AVAILABILITY_DOMAIN_AP_TOKYO_1_AD_1 = "AP_TOKYO_1_AD_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "AP_TOKYO_1_POP_1"
    AVAILABILITY_DOMAIN_AP_TOKYO_1_POP_1 = "AP_TOKYO_1_POP_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "US_LUKE_1_AD_1"
    AVAILABILITY_DOMAIN_US_LUKE_1_AD_1 = "US_LUKE_1_AD_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "US_LUKE_1_POP_1"
    AVAILABILITY_DOMAIN_US_LUKE_1_POP_1 = "US_LUKE_1_POP_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "US_LANGLEY_1_AD_1"
    AVAILABILITY_DOMAIN_US_LANGLEY_1_AD_1 = "US_LANGLEY_1_AD_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "US_LANGLEY_1_POP_1"
    AVAILABILITY_DOMAIN_US_LANGLEY_1_POP_1 = "US_LANGLEY_1_POP_1"

    #: A constant which can be used with the availability_domain property of a Resource.
    #: This constant has a value of "NO_AD"
    AVAILABILITY_DOMAIN_NO_AD = "NO_AD"

    def __init__(self, **kwargs):
        """
        Initializes a new Resource object with values from keyword arguments.
        The following keyword arguments are supported (corresponding to the getters/setters of this class):

        :param item:
            The value to assign to the item property of this Resource.
        :type item: Item

        :param region:
            The value to assign to the region property of this Resource.
            Allowed values for this property are: "DEV", "SEA", "INTEG_NEXT", "INTEG_STABLE", "PHX", "IAD", "EU_FRANKFURT_1", "UK_LONDON_1", "CA_TORONTO_1", "AP_TOKYO_1", "US_LANGLEY_1", "US_LUKE_1", 'UNKNOWN_ENUM_VALUE'.
            Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
        :type region: str

        :param availability_domain:
            The value to assign to the availability_domain property of this Resource.
            Allowed values for this property are: "DEV_1", "DEV_2", "DEV_3", "INTEG_NEXT_1", "INTEG_STABLE_1", "SEA_AD_1", "SEA_AD_2", "SEA_AD_3", "PHX_AD_1", "PHX_AD_2", "PHX_AD_3", "IAD_AD_1", "IAD_AD_2", "IAD_AD_3", "IAD_POP_1", "IAD_POP_2", "EU_FRANKFURT_1_AD_1", "EU_FRANKFURT_1_AD_2", "EU_FRANKFURT_1_AD_3", "EU_FRANKFURT_1_POP_1", "UK_LONDON_1_AD_1", "UK_LONDON_1_AD_2", "UK_LONDON_1_AD_3", "UK_LONDON_1_POP_1", "UK_LONDON_1_POP_2", "CA_TORONTO_1_AD_1", "CA_TORONTO_1_POP_1", "AP_TOKYO_1_AD_1", "AP_TOKYO_1_POP_1", "US_LUKE_1_AD_1", "US_LUKE_1_POP_1", "US_LANGLEY_1_AD_1", "US_LANGLEY_1_POP_1", "NO_AD", 'UNKNOWN_ENUM_VALUE'.
            Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
        :type availability_domain: str

        """
        self.swagger_types = {
            'item': 'Item',
            'region': 'str',
            'availability_domain': 'str'
        }

        self.attribute_map = {
            'item': 'item',
            'region': 'region',
            'availability_domain': 'availabilityDomain'
        }

        self._item = None
        self._region = None
        self._availability_domain = None

    @property
    def item(self):
        """
        Gets the item of this Resource.

        :return: The item of this Resource.
        :rtype: Item
        """
        return self._item

    @item.setter
    def item(self, item):
        """
        Sets the item of this Resource.

        :param item: The item of this Resource.
        :type: Item
        """
        self._item = item

    @property
    def region(self):
        """
        Gets the region of this Resource.
        Allowed values for this property are: "DEV", "SEA", "INTEG_NEXT", "INTEG_STABLE", "PHX", "IAD", "EU_FRANKFURT_1", "UK_LONDON_1", "CA_TORONTO_1", "AP_TOKYO_1", "US_LANGLEY_1", "US_LUKE_1", 'UNKNOWN_ENUM_VALUE'.
        Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.


        :return: The region of this Resource.
        :rtype: str
        """
        return self._region

    @region.setter
    def region(self, region):
        """
        Sets the region of this Resource.

        :param region: The region of this Resource.
        :type: str
        """
        allowed_values = ["DEV", "SEA", "INTEG_NEXT", "INTEG_STABLE", "PHX", "IAD", "EU_FRANKFURT_1", "UK_LONDON_1", "CA_TORONTO_1", "AP_TOKYO_1", "US_LANGLEY_1", "US_LUKE_1"]
        if not value_allowed_none_or_none_sentinel(region, allowed_values):
            region = 'UNKNOWN_ENUM_VALUE'
        self._region = region

    @property
    def availability_domain(self):
        """
        Gets the availability_domain of this Resource.
        Allowed values for this property are: "DEV_1", "DEV_2", "DEV_3", "INTEG_NEXT_1", "INTEG_STABLE_1", "SEA_AD_1", "SEA_AD_2", "SEA_AD_3", "PHX_AD_1", "PHX_AD_2", "PHX_AD_3", "IAD_AD_1", "IAD_AD_2", "IAD_AD_3", "IAD_POP_1", "IAD_POP_2", "EU_FRANKFURT_1_AD_1", "EU_FRANKFURT_1_AD_2", "EU_FRANKFURT_1_AD_3", "EU_FRANKFURT_1_POP_1", "UK_LONDON_1_AD_1", "UK_LONDON_1_AD_2", "UK_LONDON_1_AD_3", "UK_LONDON_1_POP_1", "UK_LONDON_1_POP_2", "CA_TORONTO_1_AD_1", "CA_TORONTO_1_POP_1", "AP_TOKYO_1_AD_1", "AP_TOKYO_1_POP_1", "US_LUKE_1_AD_1", "US_LUKE_1_POP_1", "US_LANGLEY_1_AD_1", "US_LANGLEY_1_POP_1", "NO_AD", 'UNKNOWN_ENUM_VALUE'.
        Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.


        :return: The availability_domain of this Resource.
        :rtype: str
        """
        return self._availability_domain

    @availability_domain.setter
    def availability_domain(self, availability_domain):
        """
        Sets the availability_domain of this Resource.

        :param availability_domain: The availability_domain of this Resource.
        :type: str
        """
        allowed_values = ["DEV_1", "DEV_2", "DEV_3", "INTEG_NEXT_1", "INTEG_STABLE_1", "SEA_AD_1", "SEA_AD_2", "SEA_AD_3", "PHX_AD_1", "PHX_AD_2", "PHX_AD_3", "IAD_AD_1", "IAD_AD_2", "IAD_AD_3", "IAD_POP_1", "IAD_POP_2", "EU_FRANKFURT_1_AD_1", "EU_FRANKFURT_1_AD_2", "EU_FRANKFURT_1_AD_3", "EU_FRANKFURT_1_POP_1", "UK_LONDON_1_AD_1", "UK_LONDON_1_AD_2", "UK_LONDON_1_AD_3", "UK_LONDON_1_POP_1", "UK_LONDON_1_POP_2", "CA_TORONTO_1_AD_1", "CA_TORONTO_1_POP_1", "AP_TOKYO_1_AD_1", "AP_TOKYO_1_POP_1", "US_LUKE_1_AD_1", "US_LUKE_1_POP_1", "US_LANGLEY_1_AD_1", "US_LANGLEY_1_POP_1", "NO_AD"]
        if not value_allowed_none_or_none_sentinel(availability_domain, allowed_values):
            availability_domain = 'UNKNOWN_ENUM_VALUE'
        self._availability_domain = availability_domain

    def __repr__(self):
        return formatted_flat_dict(self)

    def __eq__(self, other):
        if other is None:
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not self == other
