# coding: utf-8

"""
    NFL v3 Play-by-Play

    NFL play-by-play API.  # noqa: E501

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

import pprint
import re  # noqa: F401

import six

class NflPlayByPlayPlay(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 = {
        'play_id': 'int',
        'quarter_id': 'int',
        'quarter_name': 'str',
        'sequence': 'int',
        'time_remaining_minutes': 'int',
        'time_remaining_seconds': 'int',
        'play_time': 'str',
        'updated': 'str',
        'created': 'str',
        'team': 'str',
        'opponent': 'str',
        'down': 'int',
        'distance': 'int',
        'yard_line': 'int',
        'yard_line_territory': 'str',
        'yards_to_end_zone': 'int',
        'type': 'str',
        'yards_gained': 'int',
        'description': 'str',
        'is_scoring_play': 'bool',
        'scoring_play': 'NflPlayByPlayScoringPlay',
        'play_stats': 'list[NflPlayByPlayPlayStat]'
    }

    attribute_map = {
        'play_id': 'PlayID',
        'quarter_id': 'QuarterID',
        'quarter_name': 'QuarterName',
        'sequence': 'Sequence',
        'time_remaining_minutes': 'TimeRemainingMinutes',
        'time_remaining_seconds': 'TimeRemainingSeconds',
        'play_time': 'PlayTime',
        'updated': 'Updated',
        'created': 'Created',
        'team': 'Team',
        'opponent': 'Opponent',
        'down': 'Down',
        'distance': 'Distance',
        'yard_line': 'YardLine',
        'yard_line_territory': 'YardLineTerritory',
        'yards_to_end_zone': 'YardsToEndZone',
        'type': 'Type',
        'yards_gained': 'YardsGained',
        'description': 'Description',
        'is_scoring_play': 'IsScoringPlay',
        'scoring_play': 'ScoringPlay',
        'play_stats': 'PlayStats'
    }

    def __init__(self, play_id=None, quarter_id=None, quarter_name=None, sequence=None, time_remaining_minutes=None, time_remaining_seconds=None, play_time=None, updated=None, created=None, team=None, opponent=None, down=None, distance=None, yard_line=None, yard_line_territory=None, yards_to_end_zone=None, type=None, yards_gained=None, description=None, is_scoring_play=None, scoring_play=None, play_stats=None):  # noqa: E501
        """NflPlayByPlayPlay - a model defined in Swagger"""  # noqa: E501
        self._play_id = None
        self._quarter_id = None
        self._quarter_name = None
        self._sequence = None
        self._time_remaining_minutes = None
        self._time_remaining_seconds = None
        self._play_time = None
        self._updated = None
        self._created = None
        self._team = None
        self._opponent = None
        self._down = None
        self._distance = None
        self._yard_line = None
        self._yard_line_territory = None
        self._yards_to_end_zone = None
        self._type = None
        self._yards_gained = None
        self._description = None
        self._is_scoring_play = None
        self._scoring_play = None
        self._play_stats = None
        self.discriminator = None
        if play_id is not None:
            self.play_id = play_id
        if quarter_id is not None:
            self.quarter_id = quarter_id
        if quarter_name is not None:
            self.quarter_name = quarter_name
        if sequence is not None:
            self.sequence = sequence
        if time_remaining_minutes is not None:
            self.time_remaining_minutes = time_remaining_minutes
        if time_remaining_seconds is not None:
            self.time_remaining_seconds = time_remaining_seconds
        if play_time is not None:
            self.play_time = play_time
        if updated is not None:
            self.updated = updated
        if created is not None:
            self.created = created
        if team is not None:
            self.team = team
        if opponent is not None:
            self.opponent = opponent
        if down is not None:
            self.down = down
        if distance is not None:
            self.distance = distance
        if yard_line is not None:
            self.yard_line = yard_line
        if yard_line_territory is not None:
            self.yard_line_territory = yard_line_territory
        if yards_to_end_zone is not None:
            self.yards_to_end_zone = yards_to_end_zone
        if type is not None:
            self.type = type
        if yards_gained is not None:
            self.yards_gained = yards_gained
        if description is not None:
            self.description = description
        if is_scoring_play is not None:
            self.is_scoring_play = is_scoring_play
        if scoring_play is not None:
            self.scoring_play = scoring_play
        if play_stats is not None:
            self.play_stats = play_stats

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


        :return: The play_id of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: int
        """
        return self._play_id

    @play_id.setter
    def play_id(self, play_id):
        """Sets the play_id of this NflPlayByPlayPlay.


        :param play_id: The play_id of this NflPlayByPlayPlay.  # noqa: E501
        :type: int
        """

        self._play_id = play_id

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


        :return: The quarter_id of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: int
        """
        return self._quarter_id

    @quarter_id.setter
    def quarter_id(self, quarter_id):
        """Sets the quarter_id of this NflPlayByPlayPlay.


        :param quarter_id: The quarter_id of this NflPlayByPlayPlay.  # noqa: E501
        :type: int
        """

        self._quarter_id = quarter_id

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


        :return: The quarter_name of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: str
        """
        return self._quarter_name

    @quarter_name.setter
    def quarter_name(self, quarter_name):
        """Sets the quarter_name of this NflPlayByPlayPlay.


        :param quarter_name: The quarter_name of this NflPlayByPlayPlay.  # noqa: E501
        :type: str
        """

        self._quarter_name = quarter_name

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


        :return: The sequence of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: int
        """
        return self._sequence

    @sequence.setter
    def sequence(self, sequence):
        """Sets the sequence of this NflPlayByPlayPlay.


        :param sequence: The sequence of this NflPlayByPlayPlay.  # noqa: E501
        :type: int
        """

        self._sequence = sequence

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


        :return: The time_remaining_minutes of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: int
        """
        return self._time_remaining_minutes

    @time_remaining_minutes.setter
    def time_remaining_minutes(self, time_remaining_minutes):
        """Sets the time_remaining_minutes of this NflPlayByPlayPlay.


        :param time_remaining_minutes: The time_remaining_minutes of this NflPlayByPlayPlay.  # noqa: E501
        :type: int
        """

        self._time_remaining_minutes = time_remaining_minutes

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


        :return: The time_remaining_seconds of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: int
        """
        return self._time_remaining_seconds

    @time_remaining_seconds.setter
    def time_remaining_seconds(self, time_remaining_seconds):
        """Sets the time_remaining_seconds of this NflPlayByPlayPlay.


        :param time_remaining_seconds: The time_remaining_seconds of this NflPlayByPlayPlay.  # noqa: E501
        :type: int
        """

        self._time_remaining_seconds = time_remaining_seconds

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


        :return: The play_time of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: str
        """
        return self._play_time

    @play_time.setter
    def play_time(self, play_time):
        """Sets the play_time of this NflPlayByPlayPlay.


        :param play_time: The play_time of this NflPlayByPlayPlay.  # noqa: E501
        :type: str
        """

        self._play_time = play_time

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


        :return: The updated of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: str
        """
        return self._updated

    @updated.setter
    def updated(self, updated):
        """Sets the updated of this NflPlayByPlayPlay.


        :param updated: The updated of this NflPlayByPlayPlay.  # noqa: E501
        :type: str
        """

        self._updated = updated

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


        :return: The created of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: str
        """
        return self._created

    @created.setter
    def created(self, created):
        """Sets the created of this NflPlayByPlayPlay.


        :param created: The created of this NflPlayByPlayPlay.  # noqa: E501
        :type: str
        """

        self._created = created

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


        :return: The team of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: str
        """
        return self._team

    @team.setter
    def team(self, team):
        """Sets the team of this NflPlayByPlayPlay.


        :param team: The team of this NflPlayByPlayPlay.  # noqa: E501
        :type: str
        """

        self._team = team

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


        :return: The opponent of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: str
        """
        return self._opponent

    @opponent.setter
    def opponent(self, opponent):
        """Sets the opponent of this NflPlayByPlayPlay.


        :param opponent: The opponent of this NflPlayByPlayPlay.  # noqa: E501
        :type: str
        """

        self._opponent = opponent

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


        :return: The down of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: int
        """
        return self._down

    @down.setter
    def down(self, down):
        """Sets the down of this NflPlayByPlayPlay.


        :param down: The down of this NflPlayByPlayPlay.  # noqa: E501
        :type: int
        """

        self._down = down

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


        :return: The distance of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: int
        """
        return self._distance

    @distance.setter
    def distance(self, distance):
        """Sets the distance of this NflPlayByPlayPlay.


        :param distance: The distance of this NflPlayByPlayPlay.  # noqa: E501
        :type: int
        """

        self._distance = distance

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


        :return: The yard_line of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: int
        """
        return self._yard_line

    @yard_line.setter
    def yard_line(self, yard_line):
        """Sets the yard_line of this NflPlayByPlayPlay.


        :param yard_line: The yard_line of this NflPlayByPlayPlay.  # noqa: E501
        :type: int
        """

        self._yard_line = yard_line

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


        :return: The yard_line_territory of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: str
        """
        return self._yard_line_territory

    @yard_line_territory.setter
    def yard_line_territory(self, yard_line_territory):
        """Sets the yard_line_territory of this NflPlayByPlayPlay.


        :param yard_line_territory: The yard_line_territory of this NflPlayByPlayPlay.  # noqa: E501
        :type: str
        """

        self._yard_line_territory = yard_line_territory

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


        :return: The yards_to_end_zone of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: int
        """
        return self._yards_to_end_zone

    @yards_to_end_zone.setter
    def yards_to_end_zone(self, yards_to_end_zone):
        """Sets the yards_to_end_zone of this NflPlayByPlayPlay.


        :param yards_to_end_zone: The yards_to_end_zone of this NflPlayByPlayPlay.  # noqa: E501
        :type: int
        """

        self._yards_to_end_zone = yards_to_end_zone

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


        :return: The type of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type):
        """Sets the type of this NflPlayByPlayPlay.


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

        self._type = type

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


        :return: The yards_gained of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: int
        """
        return self._yards_gained

    @yards_gained.setter
    def yards_gained(self, yards_gained):
        """Sets the yards_gained of this NflPlayByPlayPlay.


        :param yards_gained: The yards_gained of this NflPlayByPlayPlay.  # noqa: E501
        :type: int
        """

        self._yards_gained = yards_gained

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


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

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


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

        self._description = description

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


        :return: The is_scoring_play of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: bool
        """
        return self._is_scoring_play

    @is_scoring_play.setter
    def is_scoring_play(self, is_scoring_play):
        """Sets the is_scoring_play of this NflPlayByPlayPlay.


        :param is_scoring_play: The is_scoring_play of this NflPlayByPlayPlay.  # noqa: E501
        :type: bool
        """

        self._is_scoring_play = is_scoring_play

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


        :return: The scoring_play of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: NflPlayByPlayScoringPlay
        """
        return self._scoring_play

    @scoring_play.setter
    def scoring_play(self, scoring_play):
        """Sets the scoring_play of this NflPlayByPlayPlay.


        :param scoring_play: The scoring_play of this NflPlayByPlayPlay.  # noqa: E501
        :type: NflPlayByPlayScoringPlay
        """

        self._scoring_play = scoring_play

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


        :return: The play_stats of this NflPlayByPlayPlay.  # noqa: E501
        :rtype: list[NflPlayByPlayPlayStat]
        """
        return self._play_stats

    @play_stats.setter
    def play_stats(self, play_stats):
        """Sets the play_stats of this NflPlayByPlayPlay.


        :param play_stats: The play_stats of this NflPlayByPlayPlay.  # noqa: E501
        :type: list[NflPlayByPlayPlayStat]
        """

        self._play_stats = play_stats

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

        return self.__dict__ == other.__dict__

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