# coding: utf-8

"""
    TheTVDB API v2

    API v3 targets v2 functionality with a few minor additions. The API is accessible via https://api.thetvdb.com and provides the following REST endpoints in JSON format.   How to use this API documentation ----------------   You may browse the API routes without authentication, but if you wish to send requests to the API and see response data, then you must authenticate. 1. Obtain a JWT token by `POST`ing  to the `/login` route in the `Authentication` section with your API key and credentials. 1. Paste the JWT token from the response into the \"JWT Token\" field at the top of the page and click the 'Add Token' button.   You will now be able to use the remaining routes to send requests to the API and get a response.   Language Selection ----------------   Language selection is done via the `Accept-Language` header. At the moment, you may only pass one language abbreviation in the header at a time. Valid language abbreviations can be found at the `/languages` route..   Authentication ----------------   Authentication to use the API is similar to the How-to section above. Users must `POST` to the `/login` route with their API key and credentials in the following format in order to obtain a JWT token.  `{\"apikey\":\"APIKEY\",\"username\":\"USERNAME\",\"userkey\":\"USERKEY\"}`  Note that the username and key are ONLY required for the `/user` routes. The user's key is labled `Account Identifier` in the account section of the main site. The token is then used in all subsequent requests by providing it in the `Authorization` header. The header will look like: `Authorization: Bearer <yourJWTtoken>`. Currently, the token expires after 24 hours. You can `GET` the `/refresh_token` route to extend that expiration date.   Versioning ----------------   You may request a different version of the API by including an `Accept` header in your request with the following format: `Accept:application/vnd.thetvdb.v$VERSION`. This documentation automatically uses the version seen at the top and bottom of the page.  # noqa: E501

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


import pprint
import re  # noqa: F401

import six


class Movie(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 = {
        'artworks': 'list[MovieArtwork]',
        'genres': 'list[MovieGenre]',
        'id': 'int',
        'people': 'MoviePeople',
        'release_dates': 'list[MovieReleaseDate]',
        'remoteids': 'list[MovieRemoteId]',
        'runtime': 'int',
        'trailers': 'list[MovieTrailer]',
        'translations': 'list[MovieTranslation]',
        'url': 'str'
    }

    attribute_map = {
        'artworks': 'artworks',
        'genres': 'genres',
        'id': 'id',
        'people': 'people',
        'release_dates': 'release_dates',
        'remoteids': 'remoteids',
        'runtime': 'runtime',
        'trailers': 'trailers',
        'translations': 'translations',
        'url': 'url'
    }

    def __init__(self, artworks=None, genres=None, id=None, people=None, release_dates=None, remoteids=None, runtime=None, trailers=None, translations=None, url=None):  # noqa: E501
        """Movie - a model defined in Swagger"""  # noqa: E501

        self._artworks = None
        self._genres = None
        self._id = None
        self._people = None
        self._release_dates = None
        self._remoteids = None
        self._runtime = None
        self._trailers = None
        self._translations = None
        self._url = None
        self.discriminator = None

        if artworks is not None:
            self.artworks = artworks
        if genres is not None:
            self.genres = genres
        if id is not None:
            self.id = id
        if people is not None:
            self.people = people
        if release_dates is not None:
            self.release_dates = release_dates
        if remoteids is not None:
            self.remoteids = remoteids
        if runtime is not None:
            self.runtime = runtime
        if trailers is not None:
            self.trailers = trailers
        if translations is not None:
            self.translations = translations
        if url is not None:
            self.url = url

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


        :return: The artworks of this Movie.  # noqa: E501
        :rtype: list[MovieArtwork]
        """
        return self._artworks

    @artworks.setter
    def artworks(self, artworks):
        """Sets the artworks of this Movie.


        :param artworks: The artworks of this Movie.  # noqa: E501
        :type: list[MovieArtwork]
        """

        self._artworks = artworks

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


        :return: The genres of this Movie.  # noqa: E501
        :rtype: list[MovieGenre]
        """
        return self._genres

    @genres.setter
    def genres(self, genres):
        """Sets the genres of this Movie.


        :param genres: The genres of this Movie.  # noqa: E501
        :type: list[MovieGenre]
        """

        self._genres = genres

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


        :return: The id of this Movie.  # noqa: E501
        :rtype: int
        """
        return self._id

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


        :param id: The id of this Movie.  # noqa: E501
        :type: int
        """

        self._id = id

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


        :return: The people of this Movie.  # noqa: E501
        :rtype: MoviePeople
        """
        return self._people

    @people.setter
    def people(self, people):
        """Sets the people of this Movie.


        :param people: The people of this Movie.  # noqa: E501
        :type: MoviePeople
        """

        self._people = people

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


        :return: The release_dates of this Movie.  # noqa: E501
        :rtype: list[MovieReleaseDate]
        """
        return self._release_dates

    @release_dates.setter
    def release_dates(self, release_dates):
        """Sets the release_dates of this Movie.


        :param release_dates: The release_dates of this Movie.  # noqa: E501
        :type: list[MovieReleaseDate]
        """

        self._release_dates = release_dates

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


        :return: The remoteids of this Movie.  # noqa: E501
        :rtype: list[MovieRemoteId]
        """
        return self._remoteids

    @remoteids.setter
    def remoteids(self, remoteids):
        """Sets the remoteids of this Movie.


        :param remoteids: The remoteids of this Movie.  # noqa: E501
        :type: list[MovieRemoteId]
        """

        self._remoteids = remoteids

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


        :return: The runtime of this Movie.  # noqa: E501
        :rtype: int
        """
        return self._runtime

    @runtime.setter
    def runtime(self, runtime):
        """Sets the runtime of this Movie.


        :param runtime: The runtime of this Movie.  # noqa: E501
        :type: int
        """

        self._runtime = runtime

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


        :return: The trailers of this Movie.  # noqa: E501
        :rtype: list[MovieTrailer]
        """
        return self._trailers

    @trailers.setter
    def trailers(self, trailers):
        """Sets the trailers of this Movie.


        :param trailers: The trailers of this Movie.  # noqa: E501
        :type: list[MovieTrailer]
        """

        self._trailers = trailers

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


        :return: The translations of this Movie.  # noqa: E501
        :rtype: list[MovieTranslation]
        """
        return self._translations

    @translations.setter
    def translations(self, translations):
        """Sets the translations of this Movie.


        :param translations: The translations of this Movie.  # noqa: E501
        :type: list[MovieTranslation]
        """

        self._translations = translations

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


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

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


        :param url: The url of this Movie.  # 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(Movie, 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, Movie):
            return False

        return self.__dict__ == other.__dict__

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