# coding: utf-8

"""
    Shutterstock API Reference

    The Shutterstock API provides access to Shutterstock's library of media, as well as information about customers' accounts and the contributors that provide the media.  # noqa: E501

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


import pprint
import re  # noqa: F401

import six

from shutterstock_api.models.category import Category  # noqa: F401,E501
from shutterstock_api.models.contributor import Contributor  # noqa: F401,E501
from shutterstock_api.models.model import Model  # noqa: F401,E501
from shutterstock_api.models.video_assets import VideoAssets  # noqa: F401,E501


class Video(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 = {
        'added_date': 'date',
        'affiliate_url': 'str',
        'aspect': 'float',
        'aspect_ratio': 'str',
        'assets': 'VideoAssets',
        'categories': 'list[Category]',
        'contributor': 'Contributor',
        'description': 'str',
        'duration': 'float',
        'has_model_release': 'bool',
        'has_property_release': 'bool',
        'id': 'str',
        'is_adult': 'bool',
        'is_editorial': 'bool',
        'keywords': 'list[str]',
        'media_type': 'str',
        'models': 'list[Model]',
        'url': 'str'
    }

    attribute_map = {
        'added_date': 'added_date',
        'affiliate_url': 'affiliate_url',
        'aspect': 'aspect',
        'aspect_ratio': 'aspect_ratio',
        'assets': 'assets',
        'categories': 'categories',
        'contributor': 'contributor',
        'description': 'description',
        'duration': 'duration',
        'has_model_release': 'has_model_release',
        'has_property_release': 'has_property_release',
        'id': 'id',
        'is_adult': 'is_adult',
        'is_editorial': 'is_editorial',
        'keywords': 'keywords',
        'media_type': 'media_type',
        'models': 'models',
        'url': 'url'
    }

    def __init__(self, added_date=None, affiliate_url=None, aspect=None, aspect_ratio=None, assets=None, categories=None, contributor=None, description=None, duration=None, has_model_release=None, has_property_release=None, id=None, is_adult=None, is_editorial=None, keywords=None, media_type=None, models=None, url=None):  # noqa: E501
        """Video - a model defined in Swagger"""  # noqa: E501

        self._added_date = None
        self._affiliate_url = None
        self._aspect = None
        self._aspect_ratio = None
        self._assets = None
        self._categories = None
        self._contributor = None
        self._description = None
        self._duration = None
        self._has_model_release = None
        self._has_property_release = None
        self._id = None
        self._is_adult = None
        self._is_editorial = None
        self._keywords = None
        self._media_type = None
        self._models = None
        self._url = None
        self.discriminator = None

        if added_date is not None:
            self.added_date = added_date
        if affiliate_url is not None:
            self.affiliate_url = affiliate_url
        if aspect is not None:
            self.aspect = aspect
        if aspect_ratio is not None:
            self.aspect_ratio = aspect_ratio
        if assets is not None:
            self.assets = assets
        if categories is not None:
            self.categories = categories
        self.contributor = contributor
        if description is not None:
            self.description = description
        if duration is not None:
            self.duration = duration
        if has_model_release is not None:
            self.has_model_release = has_model_release
        if has_property_release is not None:
            self.has_property_release = has_property_release
        self.id = id
        if is_adult is not None:
            self.is_adult = is_adult
        if is_editorial is not None:
            self.is_editorial = is_editorial
        if keywords is not None:
            self.keywords = keywords
        self.media_type = media_type
        if models is not None:
            self.models = models
        if url is not None:
            self.url = url

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

        Date this video was added to the Shutterstock library, in the format YYYY-MM-DD  # noqa: E501

        :return: The added_date of this Video.  # noqa: E501
        :rtype: date
        """
        return self._added_date

    @added_date.setter
    def added_date(self, added_date):
        """Sets the added_date of this Video.

        Date this video was added to the Shutterstock library, in the format YYYY-MM-DD  # noqa: E501

        :param added_date: The added_date of this Video.  # noqa: E501
        :type: date
        """

        self._added_date = added_date

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

        Affiliate referral link; appears only for registered affiliate partners  # noqa: E501

        :return: The affiliate_url of this Video.  # noqa: E501
        :rtype: str
        """
        return self._affiliate_url

    @affiliate_url.setter
    def affiliate_url(self, affiliate_url):
        """Sets the affiliate_url of this Video.

        Affiliate referral link; appears only for registered affiliate partners  # noqa: E501

        :param affiliate_url: The affiliate_url of this Video.  # noqa: E501
        :type: str
        """

        self._affiliate_url = affiliate_url

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

        Aspect ratio of this video in decimal format  # noqa: E501

        :return: The aspect of this Video.  # noqa: E501
        :rtype: float
        """
        return self._aspect

    @aspect.setter
    def aspect(self, aspect):
        """Sets the aspect of this Video.

        Aspect ratio of this video in decimal format  # noqa: E501

        :param aspect: The aspect of this Video.  # noqa: E501
        :type: float
        """

        self._aspect = aspect

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

        Aspect ratio of the video  # noqa: E501

        :return: The aspect_ratio of this Video.  # noqa: E501
        :rtype: str
        """
        return self._aspect_ratio

    @aspect_ratio.setter
    def aspect_ratio(self, aspect_ratio):
        """Sets the aspect_ratio of this Video.

        Aspect ratio of the video  # noqa: E501

        :param aspect_ratio: The aspect_ratio of this Video.  # noqa: E501
        :type: str
        """

        self._aspect_ratio = aspect_ratio

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


        :return: The assets of this Video.  # noqa: E501
        :rtype: VideoAssets
        """
        return self._assets

    @assets.setter
    def assets(self, assets):
        """Sets the assets of this Video.


        :param assets: The assets of this Video.  # noqa: E501
        :type: VideoAssets
        """

        self._assets = assets

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

        List of categories  # noqa: E501

        :return: The categories of this Video.  # noqa: E501
        :rtype: list[Category]
        """
        return self._categories

    @categories.setter
    def categories(self, categories):
        """Sets the categories of this Video.

        List of categories  # noqa: E501

        :param categories: The categories of this Video.  # noqa: E501
        :type: list[Category]
        """

        self._categories = categories

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


        :return: The contributor of this Video.  # noqa: E501
        :rtype: Contributor
        """
        return self._contributor

    @contributor.setter
    def contributor(self, contributor):
        """Sets the contributor of this Video.


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

        self._contributor = contributor

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

        Description of this video  # noqa: E501

        :return: The description of this Video.  # noqa: E501
        :rtype: str
        """
        return self._description

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

        Description of this video  # noqa: E501

        :param description: The description of this Video.  # noqa: E501
        :type: str
        """

        self._description = description

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

        Duration of this video, in seconds  # noqa: E501

        :return: The duration of this Video.  # noqa: E501
        :rtype: float
        """
        return self._duration

    @duration.setter
    def duration(self, duration):
        """Sets the duration of this Video.

        Duration of this video, in seconds  # noqa: E501

        :param duration: The duration of this Video.  # noqa: E501
        :type: float
        """

        self._duration = duration

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

        Whether or not this video has been released for use by the model appearing in it  # noqa: E501

        :return: The has_model_release of this Video.  # noqa: E501
        :rtype: bool
        """
        return self._has_model_release

    @has_model_release.setter
    def has_model_release(self, has_model_release):
        """Sets the has_model_release of this Video.

        Whether or not this video has been released for use by the model appearing in it  # noqa: E501

        :param has_model_release: The has_model_release of this Video.  # noqa: E501
        :type: bool
        """

        self._has_model_release = has_model_release

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

        Whether or not this video has received a release to show the landmark or property appearing in it  # noqa: E501

        :return: The has_property_release of this Video.  # noqa: E501
        :rtype: bool
        """
        return self._has_property_release

    @has_property_release.setter
    def has_property_release(self, has_property_release):
        """Sets the has_property_release of this Video.

        Whether or not this video has received a release to show the landmark or property appearing in it  # noqa: E501

        :param has_property_release: The has_property_release of this Video.  # noqa: E501
        :type: bool
        """

        self._has_property_release = has_property_release

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

        ID of the video  # noqa: E501

        :return: The id of this Video.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this Video.

        ID of the video  # noqa: E501

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

        self._id = id

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

        Whether or not this video contains adult content  # noqa: E501

        :return: The is_adult of this Video.  # noqa: E501
        :rtype: bool
        """
        return self._is_adult

    @is_adult.setter
    def is_adult(self, is_adult):
        """Sets the is_adult of this Video.

        Whether or not this video contains adult content  # noqa: E501

        :param is_adult: The is_adult of this Video.  # noqa: E501
        :type: bool
        """

        self._is_adult = is_adult

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

        Whether or not this video is editorial content  # noqa: E501

        :return: The is_editorial of this Video.  # noqa: E501
        :rtype: bool
        """
        return self._is_editorial

    @is_editorial.setter
    def is_editorial(self, is_editorial):
        """Sets the is_editorial of this Video.

        Whether or not this video is editorial content  # noqa: E501

        :param is_editorial: The is_editorial of this Video.  # noqa: E501
        :type: bool
        """

        self._is_editorial = is_editorial

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

        Keywords associated with the content of this video  # noqa: E501

        :return: The keywords of this Video.  # noqa: E501
        :rtype: list[str]
        """
        return self._keywords

    @keywords.setter
    def keywords(self, keywords):
        """Sets the keywords of this Video.

        Keywords associated with the content of this video  # noqa: E501

        :param keywords: The keywords of this Video.  # noqa: E501
        :type: list[str]
        """

        self._keywords = keywords

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

        Media type of this video, should always be \"video\"  # noqa: E501

        :return: The media_type of this Video.  # noqa: E501
        :rtype: str
        """
        return self._media_type

    @media_type.setter
    def media_type(self, media_type):
        """Sets the media_type of this Video.

        Media type of this video, should always be \"video\"  # noqa: E501

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

        self._media_type = media_type

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

        List of models in this video  # noqa: E501

        :return: The models of this Video.  # noqa: E501
        :rtype: list[Model]
        """
        return self._models

    @models.setter
    def models(self, models):
        """Sets the models of this Video.

        List of models in this video  # noqa: E501

        :param models: The models of this Video.  # noqa: E501
        :type: list[Model]
        """

        self._models = models

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

        Link to video information page; included only for certain accounts  # noqa: E501

        :return: The url of this Video.  # noqa: E501
        :rtype: str
        """
        return self._url

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

        Link to video information page; included only for certain accounts  # noqa: E501

        :param url: The url of this Video.  # noqa: E501
        :type: str
        """

        self._url = url

    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(Video, 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, Video):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        return not self == other
