# coding: utf-8

"""
    herd

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)  # noqa: E501

    OpenAPI spec version: 0.178.0-SNAPSHOT
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six


class EmrCluster(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 = {
        'id': 'str',
        'status': 'str',
        'status_change_reason': 'StatusChangeReason',
        'status_timeline': 'StatusTimeline',
        'namespace': 'str',
        'emr_cluster_definition_name': 'str',
        'emr_cluster_name': 'str',
        'account_id': 'str',
        'active_step': 'EmrStep',
        'step': 'EmrStep',
        'dry_run': 'bool',
        'emr_cluster_created': 'bool',
        'emr_cluster_definition': 'EmrClusterDefinition',
        'instance_fleets': 'list[EmrClusterInstanceFleet]'
    }

    attribute_map = {
        'id': 'id',
        'status': 'status',
        'status_change_reason': 'statusChangeReason',
        'status_timeline': 'statusTimeline',
        'namespace': 'namespace',
        'emr_cluster_definition_name': 'emrClusterDefinitionName',
        'emr_cluster_name': 'emrClusterName',
        'account_id': 'accountId',
        'active_step': 'activeStep',
        'step': 'step',
        'dry_run': 'dryRun',
        'emr_cluster_created': 'emrClusterCreated',
        'emr_cluster_definition': 'emrClusterDefinition',
        'instance_fleets': 'instanceFleets'
    }

    def __init__(self, id=None, status=None, status_change_reason=None, status_timeline=None, namespace=None, emr_cluster_definition_name=None, emr_cluster_name=None, account_id=None, active_step=None, step=None, dry_run=None, emr_cluster_created=None, emr_cluster_definition=None, instance_fleets=None):  # noqa: E501
        """EmrCluster - a model defined in OpenAPI"""  # noqa: E501

        self._id = None
        self._status = None
        self._status_change_reason = None
        self._status_timeline = None
        self._namespace = None
        self._emr_cluster_definition_name = None
        self._emr_cluster_name = None
        self._account_id = None
        self._active_step = None
        self._step = None
        self._dry_run = None
        self._emr_cluster_created = None
        self._emr_cluster_definition = None
        self._instance_fleets = None
        self.discriminator = None

        if id is not None:
            self.id = id
        if status is not None:
            self.status = status
        if status_change_reason is not None:
            self.status_change_reason = status_change_reason
        if status_timeline is not None:
            self.status_timeline = status_timeline
        self.namespace = namespace
        self.emr_cluster_definition_name = emr_cluster_definition_name
        self.emr_cluster_name = emr_cluster_name
        if account_id is not None:
            self.account_id = account_id
        if active_step is not None:
            self.active_step = active_step
        if step is not None:
            self.step = step
        if dry_run is not None:
            self.dry_run = dry_run
        if emr_cluster_created is not None:
            self.emr_cluster_created = emr_cluster_created
        if emr_cluster_definition is not None:
            self.emr_cluster_definition = emr_cluster_definition
        if instance_fleets is not None:
            self.instance_fleets = instance_fleets

    @property
    def id(self):
        """Gets the id of this EmrCluster.  # noqa: E501


        :return: The id of this EmrCluster.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this EmrCluster.


        :param id: The id of this EmrCluster.  # noqa: E501
        :type: str
        """

        self._id = id

    @property
    def status(self):
        """Gets the status of this EmrCluster.  # noqa: E501


        :return: The status of this EmrCluster.  # noqa: E501
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status):
        """Sets the status of this EmrCluster.


        :param status: The status of this EmrCluster.  # noqa: E501
        :type: str
        """

        self._status = status

    @property
    def status_change_reason(self):
        """Gets the status_change_reason of this EmrCluster.  # noqa: E501


        :return: The status_change_reason of this EmrCluster.  # noqa: E501
        :rtype: StatusChangeReason
        """
        return self._status_change_reason

    @status_change_reason.setter
    def status_change_reason(self, status_change_reason):
        """Sets the status_change_reason of this EmrCluster.


        :param status_change_reason: The status_change_reason of this EmrCluster.  # noqa: E501
        :type: StatusChangeReason
        """

        self._status_change_reason = status_change_reason

    @property
    def status_timeline(self):
        """Gets the status_timeline of this EmrCluster.  # noqa: E501


        :return: The status_timeline of this EmrCluster.  # noqa: E501
        :rtype: StatusTimeline
        """
        return self._status_timeline

    @status_timeline.setter
    def status_timeline(self, status_timeline):
        """Sets the status_timeline of this EmrCluster.


        :param status_timeline: The status_timeline of this EmrCluster.  # noqa: E501
        :type: StatusTimeline
        """

        self._status_timeline = status_timeline

    @property
    def namespace(self):
        """Gets the namespace of this EmrCluster.  # noqa: E501


        :return: The namespace of this EmrCluster.  # noqa: E501
        :rtype: str
        """
        return self._namespace

    @namespace.setter
    def namespace(self, namespace):
        """Sets the namespace of this EmrCluster.


        :param namespace: The namespace of this EmrCluster.  # noqa: E501
        :type: str
        """
        if namespace is None:
            raise ValueError("Invalid value for `namespace`, must not be `None`")  # noqa: E501

        self._namespace = namespace

    @property
    def emr_cluster_definition_name(self):
        """Gets the emr_cluster_definition_name of this EmrCluster.  # noqa: E501


        :return: The emr_cluster_definition_name of this EmrCluster.  # noqa: E501
        :rtype: str
        """
        return self._emr_cluster_definition_name

    @emr_cluster_definition_name.setter
    def emr_cluster_definition_name(self, emr_cluster_definition_name):
        """Sets the emr_cluster_definition_name of this EmrCluster.


        :param emr_cluster_definition_name: The emr_cluster_definition_name of this EmrCluster.  # noqa: E501
        :type: str
        """
        if emr_cluster_definition_name is None:
            raise ValueError("Invalid value for `emr_cluster_definition_name`, must not be `None`")  # noqa: E501

        self._emr_cluster_definition_name = emr_cluster_definition_name

    @property
    def emr_cluster_name(self):
        """Gets the emr_cluster_name of this EmrCluster.  # noqa: E501


        :return: The emr_cluster_name of this EmrCluster.  # noqa: E501
        :rtype: str
        """
        return self._emr_cluster_name

    @emr_cluster_name.setter
    def emr_cluster_name(self, emr_cluster_name):
        """Sets the emr_cluster_name of this EmrCluster.


        :param emr_cluster_name: The emr_cluster_name of this EmrCluster.  # noqa: E501
        :type: str
        """
        if emr_cluster_name is None:
            raise ValueError("Invalid value for `emr_cluster_name`, must not be `None`")  # noqa: E501

        self._emr_cluster_name = emr_cluster_name

    @property
    def account_id(self):
        """Gets the account_id of this EmrCluster.  # noqa: E501

        The AWS account number, without dashes, where Amazon EMR service is running in  # noqa: E501

        :return: The account_id of this EmrCluster.  # noqa: E501
        :rtype: str
        """
        return self._account_id

    @account_id.setter
    def account_id(self, account_id):
        """Sets the account_id of this EmrCluster.

        The AWS account number, without dashes, where Amazon EMR service is running in  # noqa: E501

        :param account_id: The account_id of this EmrCluster.  # noqa: E501
        :type: str
        """

        self._account_id = account_id

    @property
    def active_step(self):
        """Gets the active_step of this EmrCluster.  # noqa: E501


        :return: The active_step of this EmrCluster.  # noqa: E501
        :rtype: EmrStep
        """
        return self._active_step

    @active_step.setter
    def active_step(self, active_step):
        """Sets the active_step of this EmrCluster.


        :param active_step: The active_step of this EmrCluster.  # noqa: E501
        :type: EmrStep
        """

        self._active_step = active_step

    @property
    def step(self):
        """Gets the step of this EmrCluster.  # noqa: E501


        :return: The step of this EmrCluster.  # noqa: E501
        :rtype: EmrStep
        """
        return self._step

    @step.setter
    def step(self, step):
        """Sets the step of this EmrCluster.


        :param step: The step of this EmrCluster.  # noqa: E501
        :type: EmrStep
        """

        self._step = step

    @property
    def dry_run(self):
        """Gets the dry_run of this EmrCluster.  # noqa: E501


        :return: The dry_run of this EmrCluster.  # noqa: E501
        :rtype: bool
        """
        return self._dry_run

    @dry_run.setter
    def dry_run(self, dry_run):
        """Sets the dry_run of this EmrCluster.


        :param dry_run: The dry_run of this EmrCluster.  # noqa: E501
        :type: bool
        """

        self._dry_run = dry_run

    @property
    def emr_cluster_created(self):
        """Gets the emr_cluster_created of this EmrCluster.  # noqa: E501


        :return: The emr_cluster_created of this EmrCluster.  # noqa: E501
        :rtype: bool
        """
        return self._emr_cluster_created

    @emr_cluster_created.setter
    def emr_cluster_created(self, emr_cluster_created):
        """Sets the emr_cluster_created of this EmrCluster.


        :param emr_cluster_created: The emr_cluster_created of this EmrCluster.  # noqa: E501
        :type: bool
        """

        self._emr_cluster_created = emr_cluster_created

    @property
    def emr_cluster_definition(self):
        """Gets the emr_cluster_definition of this EmrCluster.  # noqa: E501


        :return: The emr_cluster_definition of this EmrCluster.  # noqa: E501
        :rtype: EmrClusterDefinition
        """
        return self._emr_cluster_definition

    @emr_cluster_definition.setter
    def emr_cluster_definition(self, emr_cluster_definition):
        """Sets the emr_cluster_definition of this EmrCluster.


        :param emr_cluster_definition: The emr_cluster_definition of this EmrCluster.  # noqa: E501
        :type: EmrClusterDefinition
        """

        self._emr_cluster_definition = emr_cluster_definition

    @property
    def instance_fleets(self):
        """Gets the instance_fleets of this EmrCluster.  # noqa: E501

        Describes the EC2 instances and instance configurations for clusters that use the instance fleet configuration. The instance                   fleet configuration is available only in Amazon EMR versions 4.8.0 and later, excluding 5.0.x versions                  # noqa: E501

        :return: The instance_fleets of this EmrCluster.  # noqa: E501
        :rtype: list[EmrClusterInstanceFleet]
        """
        return self._instance_fleets

    @instance_fleets.setter
    def instance_fleets(self, instance_fleets):
        """Sets the instance_fleets of this EmrCluster.

        Describes the EC2 instances and instance configurations for clusters that use the instance fleet configuration. The instance                   fleet configuration is available only in Amazon EMR versions 4.8.0 and later, excluding 5.0.x versions                  # noqa: E501

        :param instance_fleets: The instance_fleets of this EmrCluster.  # noqa: E501
        :type: list[EmrClusterInstanceFleet]
        """

        self._instance_fleets = instance_fleets

    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, EmrCluster):
            return False

        return self.__dict__ == other.__dict__

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