# coding: utf-8

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

from typing import List, Dict  # noqa: F401

from swagger_server.models.base_model_ import Model
from swagger_server.models.fare import Fare  # noqa: F401,E501
from swagger_server import util


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

    Do not edit the class manually.
    """
    def __init__(self, plan_id: str=None, url: str=None, name: str=None, station_id: str=None, region_id: str=None, fare: Fare=None, is_taxable: bool=None, description: str=None):  # noqa: E501
        """SystemPricingPlan - a model defined in Swagger

        :param plan_id: The plan_id of this SystemPricingPlan.  # noqa: E501
        :type plan_id: str
        :param url: The url of this SystemPricingPlan.  # noqa: E501
        :type url: str
        :param name: The name of this SystemPricingPlan.  # noqa: E501
        :type name: str
        :param station_id: The station_id of this SystemPricingPlan.  # noqa: E501
        :type station_id: str
        :param region_id: The region_id of this SystemPricingPlan.  # noqa: E501
        :type region_id: str
        :param fare: The fare of this SystemPricingPlan.  # noqa: E501
        :type fare: Fare
        :param is_taxable: The is_taxable of this SystemPricingPlan.  # noqa: E501
        :type is_taxable: bool
        :param description: The description of this SystemPricingPlan.  # noqa: E501
        :type description: str
        """
        self.swagger_types = {
            'plan_id': str,
            'url': str,
            'name': str,
            'station_id': str,
            'region_id': str,
            'fare': Fare,
            'is_taxable': bool,
            'description': str
        }

        self.attribute_map = {
            'plan_id': 'planId',
            'url': 'url',
            'name': 'name',
            'station_id': 'stationId',
            'region_id': 'regionId',
            'fare': 'fare',
            'is_taxable': 'isTaxable',
            'description': 'description'
        }
        self._plan_id = plan_id
        self._url = url
        self._name = name
        self._station_id = station_id
        self._region_id = region_id
        self._fare = fare
        self._is_taxable = is_taxable
        self._description = description

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

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

    @property
    def plan_id(self) -> str:
        """Gets the plan_id of this SystemPricingPlan.

        a unique identifier for this plan in the system  # noqa: E501

        :return: The plan_id of this SystemPricingPlan.
        :rtype: str
        """
        return self._plan_id

    @plan_id.setter
    def plan_id(self, plan_id: str):
        """Sets the plan_id of this SystemPricingPlan.

        a unique identifier for this plan in the system  # noqa: E501

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

        self._plan_id = plan_id

    @property
    def url(self) -> str:
        """Gets the url of this SystemPricingPlan.

        a fully qualified URL where the customer can learn more about this particular scheme  # noqa: E501

        :return: The url of this SystemPricingPlan.
        :rtype: str
        """
        return self._url

    @url.setter
    def url(self, url: str):
        """Sets the url of this SystemPricingPlan.

        a fully qualified URL where the customer can learn more about this particular scheme  # noqa: E501

        :param url: The url of this SystemPricingPlan.
        :type url: str
        """

        self._url = url

    @property
    def name(self) -> str:
        """Gets the name of this SystemPricingPlan.

        name of this pricing scheme, could match Content-Language  # noqa: E501

        :return: The name of this SystemPricingPlan.
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name: str):
        """Sets the name of this SystemPricingPlan.

        name of this pricing scheme, could match Content-Language  # noqa: E501

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

        self._name = name

    @property
    def station_id(self) -> str:
        """Gets the station_id of this SystemPricingPlan.

        pricing plan for a specific station  # noqa: E501

        :return: The station_id of this SystemPricingPlan.
        :rtype: str
        """
        return self._station_id

    @station_id.setter
    def station_id(self, station_id: str):
        """Sets the station_id of this SystemPricingPlan.

        pricing plan for a specific station  # noqa: E501

        :param station_id: The station_id of this SystemPricingPlan.
        :type station_id: str
        """

        self._station_id = station_id

    @property
    def region_id(self) -> str:
        """Gets the region_id of this SystemPricingPlan.

        pricing plan for a specific region  # noqa: E501

        :return: The region_id of this SystemPricingPlan.
        :rtype: str
        """
        return self._region_id

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

        pricing plan for a specific region  # noqa: E501

        :param region_id: The region_id of this SystemPricingPlan.
        :type region_id: str
        """

        self._region_id = region_id

    @property
    def fare(self) -> Fare:
        """Gets the fare of this SystemPricingPlan.


        :return: The fare of this SystemPricingPlan.
        :rtype: Fare
        """
        return self._fare

    @fare.setter
    def fare(self, fare: Fare):
        """Sets the fare of this SystemPricingPlan.


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

        self._fare = fare

    @property
    def is_taxable(self) -> bool:
        """Gets the is_taxable of this SystemPricingPlan.

        false indicates that no additional tax will be added (either because tax is not charged, or because it is included) true indicates that tax will be added to the base price  # noqa: E501

        :return: The is_taxable of this SystemPricingPlan.
        :rtype: bool
        """
        return self._is_taxable

    @is_taxable.setter
    def is_taxable(self, is_taxable: bool):
        """Sets the is_taxable of this SystemPricingPlan.

        false indicates that no additional tax will be added (either because tax is not charged, or because it is included) true indicates that tax will be added to the base price  # noqa: E501

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

        self._is_taxable = is_taxable

    @property
    def description(self) -> str:
        """Gets the description of this SystemPricingPlan.

        Text field describing the particular pricing plan in human readable terms. This should include the duration, price, conditions, etc. that the publisher would like users to see. This is intended to be a human-readable description and should not be used for automatic calculations, should match Content-Language  # noqa: E501

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

    @description.setter
    def description(self, description: str):
        """Sets the description of this SystemPricingPlan.

        Text field describing the particular pricing plan in human readable terms. This should include the duration, price, conditions, etc. that the publisher would like users to see. This is intended to be a human-readable description and should not be used for automatic calculations, should match Content-Language  # noqa: E501

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

        self._description = description
