# coding: utf-8

from __future__ import absolute_import
from swagger_server.models.bundle_data_link_interface import BundleDataLinkInterface
from .base_model_ import Model
from datetime import date, datetime
from typing import List, Dict
from ..util import deserialize_model


class BundleDataOptionInterface(Model):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self, option_id: int=None, title: str=None, required: bool=None, type: str=None, position: int=None, sku: str=None, product_links: List[BundleDataLinkInterface]=None):
        """
        BundleDataOptionInterface - a model defined in Swagger

        :param option_id: The option_id of this BundleDataOptionInterface.
        :type option_id: int
        :param title: The title of this BundleDataOptionInterface.
        :type title: str
        :param required: The required of this BundleDataOptionInterface.
        :type required: bool
        :param type: The type of this BundleDataOptionInterface.
        :type type: str
        :param position: The position of this BundleDataOptionInterface.
        :type position: int
        :param sku: The sku of this BundleDataOptionInterface.
        :type sku: str
        :param product_links: The product_links of this BundleDataOptionInterface.
        :type product_links: List[BundleDataLinkInterface]
        """
        self.swagger_types = {
            'option_id': int,
            'title': str,
            'required': bool,
            'type': str,
            'position': int,
            'sku': str,
            'product_links': List[BundleDataLinkInterface]
        }

        self.attribute_map = {
            'option_id': 'option_id',
            'title': 'title',
            'required': 'required',
            'type': 'type',
            'position': 'position',
            'sku': 'sku',
            'product_links': 'product_links'
        }

        self._option_id = option_id
        self._title = title
        self._required = required
        self._type = type
        self._position = position
        self._sku = sku
        self._product_links = product_links

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

        :param dikt: A dict.
        :type: dict
        :return: The bundle-data-option-interface of this BundleDataOptionInterface.
        :rtype: BundleDataOptionInterface
        """
        return deserialize_model(dikt, cls)

    @property
    def option_id(self) -> int:
        """
        Gets the option_id of this BundleDataOptionInterface.
        Option id

        :return: The option_id of this BundleDataOptionInterface.
        :rtype: int
        """
        return self._option_id

    @option_id.setter
    def option_id(self, option_id: int):
        """
        Sets the option_id of this BundleDataOptionInterface.
        Option id

        :param option_id: The option_id of this BundleDataOptionInterface.
        :type option_id: int
        """

        self._option_id = option_id

    @property
    def title(self) -> str:
        """
        Gets the title of this BundleDataOptionInterface.
        Option title

        :return: The title of this BundleDataOptionInterface.
        :rtype: str
        """
        return self._title

    @title.setter
    def title(self, title: str):
        """
        Sets the title of this BundleDataOptionInterface.
        Option title

        :param title: The title of this BundleDataOptionInterface.
        :type title: str
        """

        self._title = title

    @property
    def required(self) -> bool:
        """
        Gets the required of this BundleDataOptionInterface.
        Is required option

        :return: The required of this BundleDataOptionInterface.
        :rtype: bool
        """
        return self._required

    @required.setter
    def required(self, required: bool):
        """
        Sets the required of this BundleDataOptionInterface.
        Is required option

        :param required: The required of this BundleDataOptionInterface.
        :type required: bool
        """

        self._required = required

    @property
    def type(self) -> str:
        """
        Gets the type of this BundleDataOptionInterface.
        Input type

        :return: The type of this BundleDataOptionInterface.
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type: str):
        """
        Sets the type of this BundleDataOptionInterface.
        Input type

        :param type: The type of this BundleDataOptionInterface.
        :type type: str
        """

        self._type = type

    @property
    def position(self) -> int:
        """
        Gets the position of this BundleDataOptionInterface.
        Option position

        :return: The position of this BundleDataOptionInterface.
        :rtype: int
        """
        return self._position

    @position.setter
    def position(self, position: int):
        """
        Sets the position of this BundleDataOptionInterface.
        Option position

        :param position: The position of this BundleDataOptionInterface.
        :type position: int
        """

        self._position = position

    @property
    def sku(self) -> str:
        """
        Gets the sku of this BundleDataOptionInterface.
        Product sku

        :return: The sku of this BundleDataOptionInterface.
        :rtype: str
        """
        return self._sku

    @sku.setter
    def sku(self, sku: str):
        """
        Sets the sku of this BundleDataOptionInterface.
        Product sku

        :param sku: The sku of this BundleDataOptionInterface.
        :type sku: str
        """

        self._sku = sku

    @property
    def product_links(self) -> List[BundleDataLinkInterface]:
        """
        Gets the product_links of this BundleDataOptionInterface.
        Product links

        :return: The product_links of this BundleDataOptionInterface.
        :rtype: List[BundleDataLinkInterface]
        """
        return self._product_links

    @product_links.setter
    def product_links(self, product_links: List[BundleDataLinkInterface]):
        """
        Sets the product_links of this BundleDataOptionInterface.
        Product links

        :param product_links: The product_links of this BundleDataOptionInterface.
        :type product_links: List[BundleDataLinkInterface]
        """

        self._product_links = product_links

