# coding: utf-8

"""
    Cudo Compute service

    No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)  # noqa: E501

    OpenAPI spec version: 1.0.0
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six

from src.cudo_compute.configuration import Configuration


class ListVMMachineTypesRequest(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 = {
        'cpu_model': 'str',
        'data_center_id': 'str',
        'gpu': 'int',
        'gpu_model': 'str',
        'memory_gib': 'int',
        'order_by': 'str',
        'page_number': 'int',
        'page_size': 'int',
        'public_ipv4': 'bool',
        'region_id': 'str',
        'storage_gib': 'int',
        'vcpu': 'int'
    }

    attribute_map = {
        'cpu_model': 'cpuModel',
        'data_center_id': 'dataCenterId',
        'gpu': 'gpu',
        'gpu_model': 'gpuModel',
        'memory_gib': 'memoryGib',
        'order_by': 'orderBy',
        'page_number': 'pageNumber',
        'page_size': 'pageSize',
        'public_ipv4': 'publicIpv4',
        'region_id': 'regionId',
        'storage_gib': 'storageGib',
        'vcpu': 'vcpu'
    }

    def __init__(self, cpu_model=None, data_center_id=None, gpu=None, gpu_model=None, memory_gib=None, order_by=None, page_number=None, page_size=None, public_ipv4=None, region_id=None, storage_gib=None, vcpu=None, _configuration=None):  # noqa: E501
        """ListVMMachineTypesRequest - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._cpu_model = None
        self._data_center_id = None
        self._gpu = None
        self._gpu_model = None
        self._memory_gib = None
        self._order_by = None
        self._page_number = None
        self._page_size = None
        self._public_ipv4 = None
        self._region_id = None
        self._storage_gib = None
        self._vcpu = None
        self.discriminator = None

        if cpu_model is not None:
            self.cpu_model = cpu_model
        if data_center_id is not None:
            self.data_center_id = data_center_id
        if gpu is not None:
            self.gpu = gpu
        if gpu_model is not None:
            self.gpu_model = gpu_model
        self.memory_gib = memory_gib
        if order_by is not None:
            self.order_by = order_by
        if page_number is not None:
            self.page_number = page_number
        if page_size is not None:
            self.page_size = page_size
        if public_ipv4 is not None:
            self.public_ipv4 = public_ipv4
        if region_id is not None:
            self.region_id = region_id
        if storage_gib is not None:
            self.storage_gib = storage_gib
        self.vcpu = vcpu

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


        :return: The cpu_model of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: str
        """
        return self._cpu_model

    @cpu_model.setter
    def cpu_model(self, cpu_model):
        """Sets the cpu_model of this ListVMMachineTypesRequest.


        :param cpu_model: The cpu_model of this ListVMMachineTypesRequest.  # noqa: E501
        :type: str
        """

        self._cpu_model = cpu_model

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


        :return: The data_center_id of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: str
        """
        return self._data_center_id

    @data_center_id.setter
    def data_center_id(self, data_center_id):
        """Sets the data_center_id of this ListVMMachineTypesRequest.


        :param data_center_id: The data_center_id of this ListVMMachineTypesRequest.  # noqa: E501
        :type: str
        """

        self._data_center_id = data_center_id

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


        :return: The gpu of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: int
        """
        return self._gpu

    @gpu.setter
    def gpu(self, gpu):
        """Sets the gpu of this ListVMMachineTypesRequest.


        :param gpu: The gpu of this ListVMMachineTypesRequest.  # noqa: E501
        :type: int
        """

        self._gpu = gpu

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


        :return: The gpu_model of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: str
        """
        return self._gpu_model

    @gpu_model.setter
    def gpu_model(self, gpu_model):
        """Sets the gpu_model of this ListVMMachineTypesRequest.


        :param gpu_model: The gpu_model of this ListVMMachineTypesRequest.  # noqa: E501
        :type: str
        """

        self._gpu_model = gpu_model

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


        :return: The memory_gib of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: int
        """
        return self._memory_gib

    @memory_gib.setter
    def memory_gib(self, memory_gib):
        """Sets the memory_gib of this ListVMMachineTypesRequest.


        :param memory_gib: The memory_gib of this ListVMMachineTypesRequest.  # noqa: E501
        :type: int
        """
        if self._configuration.client_side_validation and memory_gib is None:
            raise ValueError("Invalid value for `memory_gib`, must not be `None`")  # noqa: E501

        self._memory_gib = memory_gib

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


        :return: The order_by of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: str
        """
        return self._order_by

    @order_by.setter
    def order_by(self, order_by):
        """Sets the order_by of this ListVMMachineTypesRequest.


        :param order_by: The order_by of this ListVMMachineTypesRequest.  # noqa: E501
        :type: str
        """

        self._order_by = order_by

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


        :return: The page_number of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: int
        """
        return self._page_number

    @page_number.setter
    def page_number(self, page_number):
        """Sets the page_number of this ListVMMachineTypesRequest.


        :param page_number: The page_number of this ListVMMachineTypesRequest.  # noqa: E501
        :type: int
        """

        self._page_number = page_number

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


        :return: The page_size of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: int
        """
        return self._page_size

    @page_size.setter
    def page_size(self, page_size):
        """Sets the page_size of this ListVMMachineTypesRequest.


        :param page_size: The page_size of this ListVMMachineTypesRequest.  # noqa: E501
        :type: int
        """

        self._page_size = page_size

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


        :return: The public_ipv4 of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: bool
        """
        return self._public_ipv4

    @public_ipv4.setter
    def public_ipv4(self, public_ipv4):
        """Sets the public_ipv4 of this ListVMMachineTypesRequest.


        :param public_ipv4: The public_ipv4 of this ListVMMachineTypesRequest.  # noqa: E501
        :type: bool
        """

        self._public_ipv4 = public_ipv4

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


        :return: The region_id of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: str
        """
        return self._region_id

    @region_id.setter
    def region_id(self, region_id):
        """Sets the region_id of this ListVMMachineTypesRequest.


        :param region_id: The region_id of this ListVMMachineTypesRequest.  # noqa: E501
        :type: str
        """

        self._region_id = region_id

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


        :return: The storage_gib of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: int
        """
        return self._storage_gib

    @storage_gib.setter
    def storage_gib(self, storage_gib):
        """Sets the storage_gib of this ListVMMachineTypesRequest.


        :param storage_gib: The storage_gib of this ListVMMachineTypesRequest.  # noqa: E501
        :type: int
        """

        self._storage_gib = storage_gib

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


        :return: The vcpu of this ListVMMachineTypesRequest.  # noqa: E501
        :rtype: int
        """
        return self._vcpu

    @vcpu.setter
    def vcpu(self, vcpu):
        """Sets the vcpu of this ListVMMachineTypesRequest.


        :param vcpu: The vcpu of this ListVMMachineTypesRequest.  # noqa: E501
        :type: int
        """
        if self._configuration.client_side_validation and vcpu is None:
            raise ValueError("Invalid value for `vcpu`, must not be `None`")  # noqa: E501

        self._vcpu = vcpu

    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(ListVMMachineTypesRequest, 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, ListVMMachineTypesRequest):
            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, ListVMMachineTypesRequest):
            return True

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