# coding: utf-8

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


class DownloadableDataLinkInterface(Model):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self, id: int=None, title: str=None, sort_order: int=None, is_shareable: int=None, price: float=None, number_of_downloads: int=None, link_type: str=None, link_file: str=None, link_file_content: DownloadableDataFileContentInterface=None, link_url: str=None, sample_type: str=None, sample_file: str=None, sample_file_content: DownloadableDataFileContentInterface=None, sample_url: str=None):
        """
        DownloadableDataLinkInterface - a model defined in Swagger

        :param id: The id of this DownloadableDataLinkInterface.
        :type id: int
        :param title: The title of this DownloadableDataLinkInterface.
        :type title: str
        :param sort_order: The sort_order of this DownloadableDataLinkInterface.
        :type sort_order: int
        :param is_shareable: The is_shareable of this DownloadableDataLinkInterface.
        :type is_shareable: int
        :param price: The price of this DownloadableDataLinkInterface.
        :type price: float
        :param number_of_downloads: The number_of_downloads of this DownloadableDataLinkInterface.
        :type number_of_downloads: int
        :param link_type: The link_type of this DownloadableDataLinkInterface.
        :type link_type: str
        :param link_file: The link_file of this DownloadableDataLinkInterface.
        :type link_file: str
        :param link_file_content: The link_file_content of this DownloadableDataLinkInterface.
        :type link_file_content: DownloadableDataFileContentInterface
        :param link_url: The link_url of this DownloadableDataLinkInterface.
        :type link_url: str
        :param sample_type: The sample_type of this DownloadableDataLinkInterface.
        :type sample_type: str
        :param sample_file: The sample_file of this DownloadableDataLinkInterface.
        :type sample_file: str
        :param sample_file_content: The sample_file_content of this DownloadableDataLinkInterface.
        :type sample_file_content: DownloadableDataFileContentInterface
        :param sample_url: The sample_url of this DownloadableDataLinkInterface.
        :type sample_url: str
        """
        self.swagger_types = {
            'id': int,
            'title': str,
            'sort_order': int,
            'is_shareable': int,
            'price': float,
            'number_of_downloads': int,
            'link_type': str,
            'link_file': str,
            'link_file_content': DownloadableDataFileContentInterface,
            'link_url': str,
            'sample_type': str,
            'sample_file': str,
            'sample_file_content': DownloadableDataFileContentInterface,
            'sample_url': str
        }

        self.attribute_map = {
            'id': 'id',
            'title': 'title',
            'sort_order': 'sort_order',
            'is_shareable': 'is_shareable',
            'price': 'price',
            'number_of_downloads': 'number_of_downloads',
            'link_type': 'link_type',
            'link_file': 'link_file',
            'link_file_content': 'link_file_content',
            'link_url': 'link_url',
            'sample_type': 'sample_type',
            'sample_file': 'sample_file',
            'sample_file_content': 'sample_file_content',
            'sample_url': 'sample_url'
        }

        self._id = id
        self._title = title
        self._sort_order = sort_order
        self._is_shareable = is_shareable
        self._price = price
        self._number_of_downloads = number_of_downloads
        self._link_type = link_type
        self._link_file = link_file
        self._link_file_content = link_file_content
        self._link_url = link_url
        self._sample_type = sample_type
        self._sample_file = sample_file
        self._sample_file_content = sample_file_content
        self._sample_url = sample_url

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

        :param dikt: A dict.
        :type: dict
        :return: The downloadable-data-link-interface of this DownloadableDataLinkInterface.
        :rtype: DownloadableDataLinkInterface
        """
        return deserialize_model(dikt, cls)

    @property
    def id(self) -> int:
        """
        Gets the id of this DownloadableDataLinkInterface.
        Sample(or link) id

        :return: The id of this DownloadableDataLinkInterface.
        :rtype: int
        """
        return self._id

    @id.setter
    def id(self, id: int):
        """
        Sets the id of this DownloadableDataLinkInterface.
        Sample(or link) id

        :param id: The id of this DownloadableDataLinkInterface.
        :type id: int
        """

        self._id = id

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

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

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

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

        self._title = title

    @property
    def sort_order(self) -> int:
        """
        Gets the sort_order of this DownloadableDataLinkInterface.

        :return: The sort_order of this DownloadableDataLinkInterface.
        :rtype: int
        """
        return self._sort_order

    @sort_order.setter
    def sort_order(self, sort_order: int):
        """
        Sets the sort_order of this DownloadableDataLinkInterface.

        :param sort_order: The sort_order of this DownloadableDataLinkInterface.
        :type sort_order: int
        """
        if sort_order is None:
            raise ValueError("Invalid value for `sort_order`, must not be `None`")

        self._sort_order = sort_order

    @property
    def is_shareable(self) -> int:
        """
        Gets the is_shareable of this DownloadableDataLinkInterface.
        Shareable status

        :return: The is_shareable of this DownloadableDataLinkInterface.
        :rtype: int
        """
        return self._is_shareable

    @is_shareable.setter
    def is_shareable(self, is_shareable: int):
        """
        Sets the is_shareable of this DownloadableDataLinkInterface.
        Shareable status

        :param is_shareable: The is_shareable of this DownloadableDataLinkInterface.
        :type is_shareable: int
        """
        if is_shareable is None:
            raise ValueError("Invalid value for `is_shareable`, must not be `None`")

        self._is_shareable = is_shareable

    @property
    def price(self) -> float:
        """
        Gets the price of this DownloadableDataLinkInterface.
        Price

        :return: The price of this DownloadableDataLinkInterface.
        :rtype: float
        """
        return self._price

    @price.setter
    def price(self, price: float):
        """
        Sets the price of this DownloadableDataLinkInterface.
        Price

        :param price: The price of this DownloadableDataLinkInterface.
        :type price: float
        """
        if price is None:
            raise ValueError("Invalid value for `price`, must not be `None`")

        self._price = price

    @property
    def number_of_downloads(self) -> int:
        """
        Gets the number_of_downloads of this DownloadableDataLinkInterface.
        Of downloads per user

        :return: The number_of_downloads of this DownloadableDataLinkInterface.
        :rtype: int
        """
        return self._number_of_downloads

    @number_of_downloads.setter
    def number_of_downloads(self, number_of_downloads: int):
        """
        Sets the number_of_downloads of this DownloadableDataLinkInterface.
        Of downloads per user

        :param number_of_downloads: The number_of_downloads of this DownloadableDataLinkInterface.
        :type number_of_downloads: int
        """

        self._number_of_downloads = number_of_downloads

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

        :return: The link_type of this DownloadableDataLinkInterface.
        :rtype: str
        """
        return self._link_type

    @link_type.setter
    def link_type(self, link_type: str):
        """
        Sets the link_type of this DownloadableDataLinkInterface.

        :param link_type: The link_type of this DownloadableDataLinkInterface.
        :type link_type: str
        """
        if link_type is None:
            raise ValueError("Invalid value for `link_type`, must not be `None`")

        self._link_type = link_type

    @property
    def link_file(self) -> str:
        """
        Gets the link_file of this DownloadableDataLinkInterface.
        relative file path

        :return: The link_file of this DownloadableDataLinkInterface.
        :rtype: str
        """
        return self._link_file

    @link_file.setter
    def link_file(self, link_file: str):
        """
        Sets the link_file of this DownloadableDataLinkInterface.
        relative file path

        :param link_file: The link_file of this DownloadableDataLinkInterface.
        :type link_file: str
        """

        self._link_file = link_file

    @property
    def link_file_content(self) -> DownloadableDataFileContentInterface:
        """
        Gets the link_file_content of this DownloadableDataLinkInterface.

        :return: The link_file_content of this DownloadableDataLinkInterface.
        :rtype: DownloadableDataFileContentInterface
        """
        return self._link_file_content

    @link_file_content.setter
    def link_file_content(self, link_file_content: DownloadableDataFileContentInterface):
        """
        Sets the link_file_content of this DownloadableDataLinkInterface.

        :param link_file_content: The link_file_content of this DownloadableDataLinkInterface.
        :type link_file_content: DownloadableDataFileContentInterface
        """

        self._link_file_content = link_file_content

    @property
    def link_url(self) -> str:
        """
        Gets the link_url of this DownloadableDataLinkInterface.
        Link url or null when type is 'file'

        :return: The link_url of this DownloadableDataLinkInterface.
        :rtype: str
        """
        return self._link_url

    @link_url.setter
    def link_url(self, link_url: str):
        """
        Sets the link_url of this DownloadableDataLinkInterface.
        Link url or null when type is 'file'

        :param link_url: The link_url of this DownloadableDataLinkInterface.
        :type link_url: str
        """

        self._link_url = link_url

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

        :return: The sample_type of this DownloadableDataLinkInterface.
        :rtype: str
        """
        return self._sample_type

    @sample_type.setter
    def sample_type(self, sample_type: str):
        """
        Sets the sample_type of this DownloadableDataLinkInterface.

        :param sample_type: The sample_type of this DownloadableDataLinkInterface.
        :type sample_type: str
        """
        if sample_type is None:
            raise ValueError("Invalid value for `sample_type`, must not be `None`")

        self._sample_type = sample_type

    @property
    def sample_file(self) -> str:
        """
        Gets the sample_file of this DownloadableDataLinkInterface.
        relative file path

        :return: The sample_file of this DownloadableDataLinkInterface.
        :rtype: str
        """
        return self._sample_file

    @sample_file.setter
    def sample_file(self, sample_file: str):
        """
        Sets the sample_file of this DownloadableDataLinkInterface.
        relative file path

        :param sample_file: The sample_file of this DownloadableDataLinkInterface.
        :type sample_file: str
        """

        self._sample_file = sample_file

    @property
    def sample_file_content(self) -> DownloadableDataFileContentInterface:
        """
        Gets the sample_file_content of this DownloadableDataLinkInterface.

        :return: The sample_file_content of this DownloadableDataLinkInterface.
        :rtype: DownloadableDataFileContentInterface
        """
        return self._sample_file_content

    @sample_file_content.setter
    def sample_file_content(self, sample_file_content: DownloadableDataFileContentInterface):
        """
        Sets the sample_file_content of this DownloadableDataLinkInterface.

        :param sample_file_content: The sample_file_content of this DownloadableDataLinkInterface.
        :type sample_file_content: DownloadableDataFileContentInterface
        """

        self._sample_file_content = sample_file_content

    @property
    def sample_url(self) -> str:
        """
        Gets the sample_url of this DownloadableDataLinkInterface.
        file URL

        :return: The sample_url of this DownloadableDataLinkInterface.
        :rtype: str
        """
        return self._sample_url

    @sample_url.setter
    def sample_url(self, sample_url: str):
        """
        Sets the sample_url of this DownloadableDataLinkInterface.
        file URL

        :param sample_url: The sample_url of this DownloadableDataLinkInterface.
        :type sample_url: str
        """

        self._sample_url = sample_url

