# coding: utf-8

"""
    KubeVirt API

    This is KubeVirt API an add-on for Kubernetes.  # noqa: E501

    OpenAPI spec version: 1.0.0
    Contact: kubevirt-dev@googlegroups.com
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six

from kubevirt.configuration import Configuration


class V1VirtualMachineInstanceMigrationStatus(object):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """

    """
    Attributes:
      swagger_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.
    """
    swagger_types = {
        'conditions': 'list[V1VirtualMachineInstanceMigrationCondition]',
        'migration_state': 'V1VirtualMachineInstanceMigrationState',
        'phase': 'str',
        'phase_transition_timestamps': 'list[V1VirtualMachineInstanceMigrationPhaseTransitionTimestamp]',
        'synchronization_addresses': 'list[str]'
    }

    attribute_map = {
        'conditions': 'conditions',
        'migration_state': 'migrationState',
        'phase': 'phase',
        'phase_transition_timestamps': 'phaseTransitionTimestamps',
        'synchronization_addresses': 'synchronizationAddresses'
    }

    def __init__(self, conditions=None, migration_state=None, phase=None, phase_transition_timestamps=None, synchronization_addresses=None, _configuration=None):  # noqa: E501
        """V1VirtualMachineInstanceMigrationStatus - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._conditions = None
        self._migration_state = None
        self._phase = None
        self._phase_transition_timestamps = None
        self._synchronization_addresses = None
        self.discriminator = None

        if conditions is not None:
            self.conditions = conditions
        if migration_state is not None:
            self.migration_state = migration_state
        if phase is not None:
            self.phase = phase
        if phase_transition_timestamps is not None:
            self.phase_transition_timestamps = phase_transition_timestamps
        if synchronization_addresses is not None:
            self.synchronization_addresses = synchronization_addresses

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


        :return: The conditions of this V1VirtualMachineInstanceMigrationStatus.  # noqa: E501
        :rtype: list[V1VirtualMachineInstanceMigrationCondition]
        """
        return self._conditions

    @conditions.setter
    def conditions(self, conditions):
        """Sets the conditions of this V1VirtualMachineInstanceMigrationStatus.


        :param conditions: The conditions of this V1VirtualMachineInstanceMigrationStatus.  # noqa: E501
        :type: list[V1VirtualMachineInstanceMigrationCondition]
        """

        self._conditions = conditions

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

        Represents the status of a live migration  # noqa: E501

        :return: The migration_state of this V1VirtualMachineInstanceMigrationStatus.  # noqa: E501
        :rtype: V1VirtualMachineInstanceMigrationState
        """
        return self._migration_state

    @migration_state.setter
    def migration_state(self, migration_state):
        """Sets the migration_state of this V1VirtualMachineInstanceMigrationStatus.

        Represents the status of a live migration  # noqa: E501

        :param migration_state: The migration_state of this V1VirtualMachineInstanceMigrationStatus.  # noqa: E501
        :type: V1VirtualMachineInstanceMigrationState
        """

        self._migration_state = migration_state

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


        :return: The phase of this V1VirtualMachineInstanceMigrationStatus.  # noqa: E501
        :rtype: str
        """
        return self._phase

    @phase.setter
    def phase(self, phase):
        """Sets the phase of this V1VirtualMachineInstanceMigrationStatus.


        :param phase: The phase of this V1VirtualMachineInstanceMigrationStatus.  # noqa: E501
        :type: str
        """

        self._phase = phase

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

        PhaseTransitionTimestamp is the timestamp of when the last phase change occurred  # noqa: E501

        :return: The phase_transition_timestamps of this V1VirtualMachineInstanceMigrationStatus.  # noqa: E501
        :rtype: list[V1VirtualMachineInstanceMigrationPhaseTransitionTimestamp]
        """
        return self._phase_transition_timestamps

    @phase_transition_timestamps.setter
    def phase_transition_timestamps(self, phase_transition_timestamps):
        """Sets the phase_transition_timestamps of this V1VirtualMachineInstanceMigrationStatus.

        PhaseTransitionTimestamp is the timestamp of when the last phase change occurred  # noqa: E501

        :param phase_transition_timestamps: The phase_transition_timestamps of this V1VirtualMachineInstanceMigrationStatus.  # noqa: E501
        :type: list[V1VirtualMachineInstanceMigrationPhaseTransitionTimestamp]
        """

        self._phase_transition_timestamps = phase_transition_timestamps

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

        The synchronization addresses one can use to connect to the synchronization controller, includes the port, if multiple addresses are available, the first one is reported in the synchronizationAddress field.  # noqa: E501

        :return: The synchronization_addresses of this V1VirtualMachineInstanceMigrationStatus.  # noqa: E501
        :rtype: list[str]
        """
        return self._synchronization_addresses

    @synchronization_addresses.setter
    def synchronization_addresses(self, synchronization_addresses):
        """Sets the synchronization_addresses of this V1VirtualMachineInstanceMigrationStatus.

        The synchronization addresses one can use to connect to the synchronization controller, includes the port, if multiple addresses are available, the first one is reported in the synchronizationAddress field.  # noqa: E501

        :param synchronization_addresses: The synchronization_addresses of this V1VirtualMachineInstanceMigrationStatus.  # noqa: E501
        :type: list[str]
        """

        self._synchronization_addresses = synchronization_addresses

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

        for attr, _ in six.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
        if issubclass(V1VirtualMachineInstanceMigrationStatus, dict):
            for key, value in self.items():
                result[key] = 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, V1VirtualMachineInstanceMigrationStatus):
            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, V1VirtualMachineInstanceMigrationStatus):
            return True

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