# coding: utf-8

from __future__ import absolute_import
from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from gpa_api.models.base_model_ import Model
from gpa_api.models.fluid import Fluid
from gpa_api.models.ship import Ship
from gpa_api.models.standard import Standard
from gpa_api.models.transport import Transport
from gpa_api import util

from gpa_api.models.fluid import Fluid  # noqa: E501
from gpa_api.models.ship import Ship  # noqa: E501
from gpa_api.models.standard import Standard  # noqa: E501
from gpa_api.models.transport import Transport  # noqa: E501

class CalculationBody(Model):
    """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).

    Do not edit the class manually.
    """

    def __init__(self, ship=None, fluid=None, transport=None, standard=None):  # noqa: E501
        """CalculationBody - a model defined in OpenAPI

        :param ship: The ship of this CalculationBody.  # noqa: E501
        :type ship: Ship
        :param fluid: The fluid of this CalculationBody.  # noqa: E501
        :type fluid: Fluid
        :param transport: The transport of this CalculationBody.  # noqa: E501
        :type transport: Transport
        :param standard: The standard of this CalculationBody.  # noqa: E501
        :type standard: Standard
        """
        self.openapi_types = {
            'ship': Ship,
            'fluid': Fluid,
            'transport': Transport,
            'standard': Standard
        }

        self.attribute_map = {
            'ship': 'ship',
            'fluid': 'fluid',
            'transport': 'transport',
            'standard': 'standard'
        }

        self._ship = ship
        self._fluid = fluid
        self._transport = transport
        self._standard = standard

    @classmethod
    def from_dict(cls, dikt) -> 'CalculationBody':
        """Returns the dict as a model

        :param dikt: A dict.
        :type: dict
        :return: The CalculationBody of this CalculationBody.  # noqa: E501
        :rtype: CalculationBody
        """
        return util.deserialize_model(dikt, cls)

    @property
    def ship(self):
        """Gets the ship of this CalculationBody.


        :return: The ship of this CalculationBody.
        :rtype: Ship
        """
        return self._ship

    @ship.setter
    def ship(self, ship):
        """Sets the ship of this CalculationBody.


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

        self._ship = ship

    @property
    def fluid(self):
        """Gets the fluid of this CalculationBody.


        :return: The fluid of this CalculationBody.
        :rtype: Fluid
        """
        return self._fluid

    @fluid.setter
    def fluid(self, fluid):
        """Sets the fluid of this CalculationBody.


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

        self._fluid = fluid

    @property
    def transport(self):
        """Gets the transport of this CalculationBody.


        :return: The transport of this CalculationBody.
        :rtype: Transport
        """
        return self._transport

    @transport.setter
    def transport(self, transport):
        """Sets the transport of this CalculationBody.


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

        self._transport = transport

    @property
    def standard(self):
        """Gets the standard of this CalculationBody.


        :return: The standard of this CalculationBody.
        :rtype: Standard
        """
        return self._standard

    @standard.setter
    def standard(self, standard):
        """Sets the standard of this CalculationBody.


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

        self._standard = standard
