# coding: utf-8
# Copyright (c) 2016, 2025, Oracle and/or its affiliates.  All rights reserved.
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.

# NOTE: This class is auto generated by OracleSDKGenerator. DO NOT EDIT. API Version: 20190415


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 ReplicaSummary(object):
    """
    Summary of the read replica.
    """

    #: A constant which can be used with the lifecycle_state property of a ReplicaSummary.
    #: This constant has a value of "CREATING"
    LIFECYCLE_STATE_CREATING = "CREATING"

    #: A constant which can be used with the lifecycle_state property of a ReplicaSummary.
    #: This constant has a value of "ACTIVE"
    LIFECYCLE_STATE_ACTIVE = "ACTIVE"

    #: A constant which can be used with the lifecycle_state property of a ReplicaSummary.
    #: This constant has a value of "INACTIVE"
    LIFECYCLE_STATE_INACTIVE = "INACTIVE"

    #: A constant which can be used with the lifecycle_state property of a ReplicaSummary.
    #: This constant has a value of "UPDATING"
    LIFECYCLE_STATE_UPDATING = "UPDATING"

    #: A constant which can be used with the lifecycle_state property of a ReplicaSummary.
    #: This constant has a value of "DELETING"
    LIFECYCLE_STATE_DELETING = "DELETING"

    #: A constant which can be used with the lifecycle_state property of a ReplicaSummary.
    #: This constant has a value of "DELETED"
    LIFECYCLE_STATE_DELETED = "DELETED"

    #: A constant which can be used with the lifecycle_state property of a ReplicaSummary.
    #: This constant has a value of "NEEDS_ATTENTION"
    LIFECYCLE_STATE_NEEDS_ATTENTION = "NEEDS_ATTENTION"

    #: A constant which can be used with the lifecycle_state property of a ReplicaSummary.
    #: This constant has a value of "FAILED"
    LIFECYCLE_STATE_FAILED = "FAILED"

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

        :param id:
            The value to assign to the id property of this ReplicaSummary.
        :type id: str

        :param db_system_id:
            The value to assign to the db_system_id property of this ReplicaSummary.
        :type db_system_id: str

        :param compartment_id:
            The value to assign to the compartment_id property of this ReplicaSummary.
        :type compartment_id: str

        :param display_name:
            The value to assign to the display_name property of this ReplicaSummary.
        :type display_name: str

        :param description:
            The value to assign to the description property of this ReplicaSummary.
        :type description: str

        :param lifecycle_state:
            The value to assign to the lifecycle_state property of this ReplicaSummary.
            Allowed values for this property are: "CREATING", "ACTIVE", "INACTIVE", "UPDATING", "DELETING", "DELETED", "NEEDS_ATTENTION", "FAILED", 'UNKNOWN_ENUM_VALUE'.
            Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
        :type lifecycle_state: str

        :param lifecycle_details:
            The value to assign to the lifecycle_details property of this ReplicaSummary.
        :type lifecycle_details: str

        :param time_created:
            The value to assign to the time_created property of this ReplicaSummary.
        :type time_created: datetime

        :param time_updated:
            The value to assign to the time_updated property of this ReplicaSummary.
        :type time_updated: datetime

        :param mysql_version:
            The value to assign to the mysql_version property of this ReplicaSummary.
        :type mysql_version: str

        :param availability_domain:
            The value to assign to the availability_domain property of this ReplicaSummary.
        :type availability_domain: str

        :param fault_domain:
            The value to assign to the fault_domain property of this ReplicaSummary.
        :type fault_domain: str

        :param nsg_ids:
            The value to assign to the nsg_ids property of this ReplicaSummary.
        :type nsg_ids: list[str]

        :param security_attributes:
            The value to assign to the security_attributes property of this ReplicaSummary.
        :type security_attributes: dict(str, dict(str, object))

        :param ip_address:
            The value to assign to the ip_address property of this ReplicaSummary.
        :type ip_address: str

        :param port:
            The value to assign to the port property of this ReplicaSummary.
        :type port: int

        :param port_x:
            The value to assign to the port_x property of this ReplicaSummary.
        :type port_x: int

        :param freeform_tags:
            The value to assign to the freeform_tags property of this ReplicaSummary.
        :type freeform_tags: dict(str, str)

        :param defined_tags:
            The value to assign to the defined_tags property of this ReplicaSummary.
        :type defined_tags: dict(str, dict(str, object))

        :param is_delete_protected:
            The value to assign to the is_delete_protected property of this ReplicaSummary.
        :type is_delete_protected: bool

        :param shape_name:
            The value to assign to the shape_name property of this ReplicaSummary.
        :type shape_name: str

        :param configuration_id:
            The value to assign to the configuration_id property of this ReplicaSummary.
        :type configuration_id: str

        :param replica_overrides:
            The value to assign to the replica_overrides property of this ReplicaSummary.
        :type replica_overrides: oci.mysql.models.ReplicaOverrides

        """
        self.swagger_types = {
            'id': 'str',
            'db_system_id': 'str',
            'compartment_id': 'str',
            'display_name': 'str',
            'description': 'str',
            'lifecycle_state': 'str',
            'lifecycle_details': 'str',
            'time_created': 'datetime',
            'time_updated': 'datetime',
            'mysql_version': 'str',
            'availability_domain': 'str',
            'fault_domain': 'str',
            'nsg_ids': 'list[str]',
            'security_attributes': 'dict(str, dict(str, object))',
            'ip_address': 'str',
            'port': 'int',
            'port_x': 'int',
            'freeform_tags': 'dict(str, str)',
            'defined_tags': 'dict(str, dict(str, object))',
            'is_delete_protected': 'bool',
            'shape_name': 'str',
            'configuration_id': 'str',
            'replica_overrides': 'ReplicaOverrides'
        }
        self.attribute_map = {
            'id': 'id',
            'db_system_id': 'dbSystemId',
            'compartment_id': 'compartmentId',
            'display_name': 'displayName',
            'description': 'description',
            'lifecycle_state': 'lifecycleState',
            'lifecycle_details': 'lifecycleDetails',
            'time_created': 'timeCreated',
            'time_updated': 'timeUpdated',
            'mysql_version': 'mysqlVersion',
            'availability_domain': 'availabilityDomain',
            'fault_domain': 'faultDomain',
            'nsg_ids': 'nsgIds',
            'security_attributes': 'securityAttributes',
            'ip_address': 'ipAddress',
            'port': 'port',
            'port_x': 'portX',
            'freeform_tags': 'freeformTags',
            'defined_tags': 'definedTags',
            'is_delete_protected': 'isDeleteProtected',
            'shape_name': 'shapeName',
            'configuration_id': 'configurationId',
            'replica_overrides': 'replicaOverrides'
        }
        self._id = None
        self._db_system_id = None
        self._compartment_id = None
        self._display_name = None
        self._description = None
        self._lifecycle_state = None
        self._lifecycle_details = None
        self._time_created = None
        self._time_updated = None
        self._mysql_version = None
        self._availability_domain = None
        self._fault_domain = None
        self._nsg_ids = None
        self._security_attributes = None
        self._ip_address = None
        self._port = None
        self._port_x = None
        self._freeform_tags = None
        self._defined_tags = None
        self._is_delete_protected = None
        self._shape_name = None
        self._configuration_id = None
        self._replica_overrides = None

    @property
    def id(self):
        """
        **[Required]** Gets the id of this ReplicaSummary.
        The OCID of the read replica.


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

    @id.setter
    def id(self, id):
        """
        Sets the id of this ReplicaSummary.
        The OCID of the read replica.


        :param id: The id of this ReplicaSummary.
        :type: str
        """
        self._id = id

    @property
    def db_system_id(self):
        """
        **[Required]** Gets the db_system_id of this ReplicaSummary.
        The OCID of the DB System the read replica is associated with.


        :return: The db_system_id of this ReplicaSummary.
        :rtype: str
        """
        return self._db_system_id

    @db_system_id.setter
    def db_system_id(self, db_system_id):
        """
        Sets the db_system_id of this ReplicaSummary.
        The OCID of the DB System the read replica is associated with.


        :param db_system_id: The db_system_id of this ReplicaSummary.
        :type: str
        """
        self._db_system_id = db_system_id

    @property
    def compartment_id(self):
        """
        **[Required]** Gets the compartment_id of this ReplicaSummary.
        The OCID of the compartment that contains the read replica.


        :return: The compartment_id of this ReplicaSummary.
        :rtype: str
        """
        return self._compartment_id

    @compartment_id.setter
    def compartment_id(self, compartment_id):
        """
        Sets the compartment_id of this ReplicaSummary.
        The OCID of the compartment that contains the read replica.


        :param compartment_id: The compartment_id of this ReplicaSummary.
        :type: str
        """
        self._compartment_id = compartment_id

    @property
    def display_name(self):
        """
        **[Required]** Gets the display_name of this ReplicaSummary.
        The user-friendly name for the read replica. It does not have to be unique.


        :return: The display_name of this ReplicaSummary.
        :rtype: str
        """
        return self._display_name

    @display_name.setter
    def display_name(self, display_name):
        """
        Sets the display_name of this ReplicaSummary.
        The user-friendly name for the read replica. It does not have to be unique.


        :param display_name: The display_name of this ReplicaSummary.
        :type: str
        """
        self._display_name = display_name

    @property
    def description(self):
        """
        Gets the description of this ReplicaSummary.
        User provided description of the read replica.


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

    @description.setter
    def description(self, description):
        """
        Sets the description of this ReplicaSummary.
        User provided description of the read replica.


        :param description: The description of this ReplicaSummary.
        :type: str
        """
        self._description = description

    @property
    def lifecycle_state(self):
        """
        **[Required]** Gets the lifecycle_state of this ReplicaSummary.
        The state of the read replica.

        Allowed values for this property are: "CREATING", "ACTIVE", "INACTIVE", "UPDATING", "DELETING", "DELETED", "NEEDS_ATTENTION", "FAILED", 'UNKNOWN_ENUM_VALUE'.
        Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.


        :return: The lifecycle_state of this ReplicaSummary.
        :rtype: str
        """
        return self._lifecycle_state

    @lifecycle_state.setter
    def lifecycle_state(self, lifecycle_state):
        """
        Sets the lifecycle_state of this ReplicaSummary.
        The state of the read replica.


        :param lifecycle_state: The lifecycle_state of this ReplicaSummary.
        :type: str
        """
        allowed_values = ["CREATING", "ACTIVE", "INACTIVE", "UPDATING", "DELETING", "DELETED", "NEEDS_ATTENTION", "FAILED"]
        if not value_allowed_none_or_none_sentinel(lifecycle_state, allowed_values):
            lifecycle_state = 'UNKNOWN_ENUM_VALUE'
        self._lifecycle_state = lifecycle_state

    @property
    def lifecycle_details(self):
        """
        Gets the lifecycle_details of this ReplicaSummary.
        A message describing the state of the read replica.


        :return: The lifecycle_details of this ReplicaSummary.
        :rtype: str
        """
        return self._lifecycle_details

    @lifecycle_details.setter
    def lifecycle_details(self, lifecycle_details):
        """
        Sets the lifecycle_details of this ReplicaSummary.
        A message describing the state of the read replica.


        :param lifecycle_details: The lifecycle_details of this ReplicaSummary.
        :type: str
        """
        self._lifecycle_details = lifecycle_details

    @property
    def time_created(self):
        """
        **[Required]** Gets the time_created of this ReplicaSummary.
        The date and time the read replica was created, as described by `RFC 3339`__.

        __ https://tools.ietf.org/rfc/rfc3339


        :return: The time_created of this ReplicaSummary.
        :rtype: datetime
        """
        return self._time_created

    @time_created.setter
    def time_created(self, time_created):
        """
        Sets the time_created of this ReplicaSummary.
        The date and time the read replica was created, as described by `RFC 3339`__.

        __ https://tools.ietf.org/rfc/rfc3339


        :param time_created: The time_created of this ReplicaSummary.
        :type: datetime
        """
        self._time_created = time_created

    @property
    def time_updated(self):
        """
        Gets the time_updated of this ReplicaSummary.
        The time the read replica was last updated, as described by `RFC 3339`__.

        __ https://tools.ietf.org/rfc/rfc3339


        :return: The time_updated of this ReplicaSummary.
        :rtype: datetime
        """
        return self._time_updated

    @time_updated.setter
    def time_updated(self, time_updated):
        """
        Sets the time_updated of this ReplicaSummary.
        The time the read replica was last updated, as described by `RFC 3339`__.

        __ https://tools.ietf.org/rfc/rfc3339


        :param time_updated: The time_updated of this ReplicaSummary.
        :type: datetime
        """
        self._time_updated = time_updated

    @property
    def mysql_version(self):
        """
        **[Required]** Gets the mysql_version of this ReplicaSummary.
        The MySQL version currently in use by the read replica.


        :return: The mysql_version of this ReplicaSummary.
        :rtype: str
        """
        return self._mysql_version

    @mysql_version.setter
    def mysql_version(self, mysql_version):
        """
        Sets the mysql_version of this ReplicaSummary.
        The MySQL version currently in use by the read replica.


        :param mysql_version: The mysql_version of this ReplicaSummary.
        :type: str
        """
        self._mysql_version = mysql_version

    @property
    def availability_domain(self):
        """
        Gets the availability_domain of this ReplicaSummary.
        The name of the Availability Domain the read replica is located in.


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

    @availability_domain.setter
    def availability_domain(self, availability_domain):
        """
        Sets the availability_domain of this ReplicaSummary.
        The name of the Availability Domain the read replica is located in.


        :param availability_domain: The availability_domain of this ReplicaSummary.
        :type: str
        """
        self._availability_domain = availability_domain

    @property
    def fault_domain(self):
        """
        Gets the fault_domain of this ReplicaSummary.
        The name of the Fault Domain the read replica is located in.


        :return: The fault_domain of this ReplicaSummary.
        :rtype: str
        """
        return self._fault_domain

    @fault_domain.setter
    def fault_domain(self, fault_domain):
        """
        Sets the fault_domain of this ReplicaSummary.
        The name of the Fault Domain the read replica is located in.


        :param fault_domain: The fault_domain of this ReplicaSummary.
        :type: str
        """
        self._fault_domain = fault_domain

    @property
    def nsg_ids(self):
        """
        Gets the nsg_ids of this ReplicaSummary.
        Network Security Group OCIDs used for the VNIC attachment.


        :return: The nsg_ids of this ReplicaSummary.
        :rtype: list[str]
        """
        return self._nsg_ids

    @nsg_ids.setter
    def nsg_ids(self, nsg_ids):
        """
        Sets the nsg_ids of this ReplicaSummary.
        Network Security Group OCIDs used for the VNIC attachment.


        :param nsg_ids: The nsg_ids of this ReplicaSummary.
        :type: list[str]
        """
        self._nsg_ids = nsg_ids

    @property
    def security_attributes(self):
        """
        Gets the security_attributes of this ReplicaSummary.
        Security Attributes for this resource. Each key is predefined and scoped to a namespace.
        For more information, see `ZPR Artifacts`__.
        Example: `{\"Oracle-ZPR\": {\"MaxEgressCount\": {\"value\": \"42\", \"mode\": \"audit\"}}}`

        __ https://docs.oracle.com/en-us/iaas/Content/zero-trust-packet-routing/zpr-artifacts.htm


        :return: The security_attributes of this ReplicaSummary.
        :rtype: dict(str, dict(str, object))
        """
        return self._security_attributes

    @security_attributes.setter
    def security_attributes(self, security_attributes):
        """
        Sets the security_attributes of this ReplicaSummary.
        Security Attributes for this resource. Each key is predefined and scoped to a namespace.
        For more information, see `ZPR Artifacts`__.
        Example: `{\"Oracle-ZPR\": {\"MaxEgressCount\": {\"value\": \"42\", \"mode\": \"audit\"}}}`

        __ https://docs.oracle.com/en-us/iaas/Content/zero-trust-packet-routing/zpr-artifacts.htm


        :param security_attributes: The security_attributes of this ReplicaSummary.
        :type: dict(str, dict(str, object))
        """
        self._security_attributes = security_attributes

    @property
    def ip_address(self):
        """
        **[Required]** Gets the ip_address of this ReplicaSummary.
        The IP address the read replica is configured to listen on.


        :return: The ip_address of this ReplicaSummary.
        :rtype: str
        """
        return self._ip_address

    @ip_address.setter
    def ip_address(self, ip_address):
        """
        Sets the ip_address of this ReplicaSummary.
        The IP address the read replica is configured to listen on.


        :param ip_address: The ip_address of this ReplicaSummary.
        :type: str
        """
        self._ip_address = ip_address

    @property
    def port(self):
        """
        **[Required]** Gets the port of this ReplicaSummary.
        The port the read replica is configured to listen on.


        :return: The port of this ReplicaSummary.
        :rtype: int
        """
        return self._port

    @port.setter
    def port(self, port):
        """
        Sets the port of this ReplicaSummary.
        The port the read replica is configured to listen on.


        :param port: The port of this ReplicaSummary.
        :type: int
        """
        self._port = port

    @property
    def port_x(self):
        """
        **[Required]** Gets the port_x of this ReplicaSummary.
        The TCP network port on which X Plugin listens for connections. This is the X Plugin equivalent of port.


        :return: The port_x of this ReplicaSummary.
        :rtype: int
        """
        return self._port_x

    @port_x.setter
    def port_x(self, port_x):
        """
        Sets the port_x of this ReplicaSummary.
        The TCP network port on which X Plugin listens for connections. This is the X Plugin equivalent of port.


        :param port_x: The port_x of this ReplicaSummary.
        :type: int
        """
        self._port_x = port_x

    @property
    def freeform_tags(self):
        """
        Gets the freeform_tags of this ReplicaSummary.
        Simple key-value pair that is applied without any predefined name, type or scope. Exists for cross-compatibility only.
        Example: `{\"bar-key\": \"value\"}`


        :return: The freeform_tags of this ReplicaSummary.
        :rtype: dict(str, str)
        """
        return self._freeform_tags

    @freeform_tags.setter
    def freeform_tags(self, freeform_tags):
        """
        Sets the freeform_tags of this ReplicaSummary.
        Simple key-value pair that is applied without any predefined name, type or scope. Exists for cross-compatibility only.
        Example: `{\"bar-key\": \"value\"}`


        :param freeform_tags: The freeform_tags of this ReplicaSummary.
        :type: dict(str, str)
        """
        self._freeform_tags = freeform_tags

    @property
    def defined_tags(self):
        """
        Gets the defined_tags of this ReplicaSummary.
        Defined tags for this resource. Each key is predefined and scoped to a namespace.
        Example: `{\"foo-namespace\": {\"bar-key\": \"value\"}}`


        :return: The defined_tags of this ReplicaSummary.
        :rtype: dict(str, dict(str, object))
        """
        return self._defined_tags

    @defined_tags.setter
    def defined_tags(self, defined_tags):
        """
        Sets the defined_tags of this ReplicaSummary.
        Defined tags for this resource. Each key is predefined and scoped to a namespace.
        Example: `{\"foo-namespace\": {\"bar-key\": \"value\"}}`


        :param defined_tags: The defined_tags of this ReplicaSummary.
        :type: dict(str, dict(str, object))
        """
        self._defined_tags = defined_tags

    @property
    def is_delete_protected(self):
        """
        Gets the is_delete_protected of this ReplicaSummary.
        Specifies whether the read replica can be deleted. Set to true to prevent deletion, false (default) to allow.
        Note that if a read replica is delete protected it also prevents the entire DB System from being deleted. If
        the DB System is delete protected, read replicas can still be deleted individually if they are not delete
        protected themselves.


        :return: The is_delete_protected of this ReplicaSummary.
        :rtype: bool
        """
        return self._is_delete_protected

    @is_delete_protected.setter
    def is_delete_protected(self, is_delete_protected):
        """
        Sets the is_delete_protected of this ReplicaSummary.
        Specifies whether the read replica can be deleted. Set to true to prevent deletion, false (default) to allow.
        Note that if a read replica is delete protected it also prevents the entire DB System from being deleted. If
        the DB System is delete protected, read replicas can still be deleted individually if they are not delete
        protected themselves.


        :param is_delete_protected: The is_delete_protected of this ReplicaSummary.
        :type: bool
        """
        self._is_delete_protected = is_delete_protected

    @property
    def shape_name(self):
        """
        Gets the shape_name of this ReplicaSummary.
        The shape currently in use by the read replica. The shape determines the resources allocated:
        CPU cores and memory for VM shapes, CPU cores, memory and storage for non-VM (bare metal) shapes.
        To get a list of shapes, use the :func:`list_shapes` operation.


        :return: The shape_name of this ReplicaSummary.
        :rtype: str
        """
        return self._shape_name

    @shape_name.setter
    def shape_name(self, shape_name):
        """
        Sets the shape_name of this ReplicaSummary.
        The shape currently in use by the read replica. The shape determines the resources allocated:
        CPU cores and memory for VM shapes, CPU cores, memory and storage for non-VM (bare metal) shapes.
        To get a list of shapes, use the :func:`list_shapes` operation.


        :param shape_name: The shape_name of this ReplicaSummary.
        :type: str
        """
        self._shape_name = shape_name

    @property
    def configuration_id(self):
        """
        Gets the configuration_id of this ReplicaSummary.
        The OCID of the Configuration currently in use by the read replica.


        :return: The configuration_id of this ReplicaSummary.
        :rtype: str
        """
        return self._configuration_id

    @configuration_id.setter
    def configuration_id(self, configuration_id):
        """
        Sets the configuration_id of this ReplicaSummary.
        The OCID of the Configuration currently in use by the read replica.


        :param configuration_id: The configuration_id of this ReplicaSummary.
        :type: str
        """
        self._configuration_id = configuration_id

    @property
    def replica_overrides(self):
        """
        Gets the replica_overrides of this ReplicaSummary.

        :return: The replica_overrides of this ReplicaSummary.
        :rtype: oci.mysql.models.ReplicaOverrides
        """
        return self._replica_overrides

    @replica_overrides.setter
    def replica_overrides(self, replica_overrides):
        """
        Sets the replica_overrides of this ReplicaSummary.

        :param replica_overrides: The replica_overrides of this ReplicaSummary.
        :type: oci.mysql.models.ReplicaOverrides
        """
        self._replica_overrides = replica_overrides

    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
