# coding: utf-8

"""
    CodeChef API

    CodeChef API to support different applications.  # noqa: E501

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


import pprint
import re  # noqa: F401

import six


class ContestProblem(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 = {
        'contest_code': 'str',
        'problem_code': 'str',
        'problem_name': 'str',
        'tags': 'list[str]',
        'author': 'str',
        'tester': 'str',
        'body': 'str',
        'challenge_type': 'str',
        'languages_supported': 'list[str]',
        'max_time_limit': 'int',
        'source_size_limit': 'int',
        'successful_submissions': 'int',
        'total_submissions': 'float',
        'partial_submissions': 'float',
        'view_start': 'str',
        'submit_start': 'str',
        'visible_start': 'str',
        'end': 'str'
    }

    attribute_map = {
        'contest_code': 'contestCode',
        'problem_code': 'problemCode',
        'problem_name': 'problemName',
        'tags': 'tags',
        'author': 'author',
        'tester': 'tester',
        'body': 'body',
        'challenge_type': 'challengeType',
        'languages_supported': 'languagesSupported',
        'max_time_limit': 'maxTimeLimit',
        'source_size_limit': 'sourceSizeLimit',
        'successful_submissions': 'successfulSubmissions',
        'total_submissions': 'totalSubmissions',
        'partial_submissions': 'partialSubmissions',
        'view_start': 'viewStart',
        'submit_start': 'submitStart',
        'visible_start': 'visibleStart',
        'end': 'end'
    }

    def __init__(self, contest_code=None, problem_code=None, problem_name=None, tags=None, author=None, tester=None, body=None, challenge_type=None, languages_supported=None, max_time_limit=None, source_size_limit=None, successful_submissions=None, total_submissions=None, partial_submissions=None, view_start=None, submit_start=None, visible_start=None, end=None):  # noqa: E501
        """ContestProblem - a model defined in Swagger"""  # noqa: E501

        self._contest_code = None
        self._problem_code = None
        self._problem_name = None
        self._tags = None
        self._author = None
        self._tester = None
        self._body = None
        self._challenge_type = None
        self._languages_supported = None
        self._max_time_limit = None
        self._source_size_limit = None
        self._successful_submissions = None
        self._total_submissions = None
        self._partial_submissions = None
        self._view_start = None
        self._submit_start = None
        self._visible_start = None
        self._end = None
        self.discriminator = None

        if contest_code is not None:
            self.contest_code = contest_code
        if problem_code is not None:
            self.problem_code = problem_code
        if problem_name is not None:
            self.problem_name = problem_name
        if tags is not None:
            self.tags = tags
        if author is not None:
            self.author = author
        if tester is not None:
            self.tester = tester
        if body is not None:
            self.body = body
        if challenge_type is not None:
            self.challenge_type = challenge_type
        if languages_supported is not None:
            self.languages_supported = languages_supported
        if max_time_limit is not None:
            self.max_time_limit = max_time_limit
        if source_size_limit is not None:
            self.source_size_limit = source_size_limit
        if successful_submissions is not None:
            self.successful_submissions = successful_submissions
        if total_submissions is not None:
            self.total_submissions = total_submissions
        if partial_submissions is not None:
            self.partial_submissions = partial_submissions
        if view_start is not None:
            self.view_start = view_start
        if submit_start is not None:
            self.submit_start = submit_start
        if visible_start is not None:
            self.visible_start = visible_start
        if end is not None:
            self.end = end

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

        Contest Code of which the problem belongs.  # noqa: E501

        :return: The contest_code of this ContestProblem.  # noqa: E501
        :rtype: str
        """
        return self._contest_code

    @contest_code.setter
    def contest_code(self, contest_code):
        """Sets the contest_code of this ContestProblem.

        Contest Code of which the problem belongs.  # noqa: E501

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

        self._contest_code = contest_code

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

        Problem Code of the problem.  # noqa: E501

        :return: The problem_code of this ContestProblem.  # noqa: E501
        :rtype: str
        """
        return self._problem_code

    @problem_code.setter
    def problem_code(self, problem_code):
        """Sets the problem_code of this ContestProblem.

        Problem Code of the problem.  # noqa: E501

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

        self._problem_code = problem_code

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

        Name of the problem  # noqa: E501

        :return: The problem_name of this ContestProblem.  # noqa: E501
        :rtype: str
        """
        return self._problem_name

    @problem_name.setter
    def problem_name(self, problem_name):
        """Sets the problem_name of this ContestProblem.

        Name of the problem  # noqa: E501

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

        self._problem_name = problem_name

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

        Problem Tags.  # noqa: E501

        :return: The tags of this ContestProblem.  # noqa: E501
        :rtype: list[str]
        """
        return self._tags

    @tags.setter
    def tags(self, tags):
        """Sets the tags of this ContestProblem.

        Problem Tags.  # noqa: E501

        :param tags: The tags of this ContestProblem.  # noqa: E501
        :type: list[str]
        """

        self._tags = tags

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

        Author of the problem.  # noqa: E501

        :return: The author of this ContestProblem.  # noqa: E501
        :rtype: str
        """
        return self._author

    @author.setter
    def author(self, author):
        """Sets the author of this ContestProblem.

        Author of the problem.  # noqa: E501

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

        self._author = author

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

        Tester of the problem.  # noqa: E501

        :return: The tester of this ContestProblem.  # noqa: E501
        :rtype: str
        """
        return self._tester

    @tester.setter
    def tester(self, tester):
        """Sets the tester of this ContestProblem.

        Tester of the problem.  # noqa: E501

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

        self._tester = tester

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

        Problem statement  # noqa: E501

        :return: The body of this ContestProblem.  # noqa: E501
        :rtype: str
        """
        return self._body

    @body.setter
    def body(self, body):
        """Sets the body of this ContestProblem.

        Problem statement  # noqa: E501

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

        self._body = body

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

        Type of the problem. Possible values can be binary, minimize, maximize and subtask.  # noqa: E501

        :return: The challenge_type of this ContestProblem.  # noqa: E501
        :rtype: str
        """
        return self._challenge_type

    @challenge_type.setter
    def challenge_type(self, challenge_type):
        """Sets the challenge_type of this ContestProblem.

        Type of the problem. Possible values can be binary, minimize, maximize and subtask.  # noqa: E501

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

        self._challenge_type = challenge_type

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


        :return: The languages_supported of this ContestProblem.  # noqa: E501
        :rtype: list[str]
        """
        return self._languages_supported

    @languages_supported.setter
    def languages_supported(self, languages_supported):
        """Sets the languages_supported of this ContestProblem.


        :param languages_supported: The languages_supported of this ContestProblem.  # noqa: E501
        :type: list[str]
        """

        self._languages_supported = languages_supported

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

        Time limit for the problem  # noqa: E501

        :return: The max_time_limit of this ContestProblem.  # noqa: E501
        :rtype: int
        """
        return self._max_time_limit

    @max_time_limit.setter
    def max_time_limit(self, max_time_limit):
        """Sets the max_time_limit of this ContestProblem.

        Time limit for the problem  # noqa: E501

        :param max_time_limit: The max_time_limit of this ContestProblem.  # noqa: E501
        :type: int
        """

        self._max_time_limit = max_time_limit

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

        Source size limit for the solution  # noqa: E501

        :return: The source_size_limit of this ContestProblem.  # noqa: E501
        :rtype: int
        """
        return self._source_size_limit

    @source_size_limit.setter
    def source_size_limit(self, source_size_limit):
        """Sets the source_size_limit of this ContestProblem.

        Source size limit for the solution  # noqa: E501

        :param source_size_limit: The source_size_limit of this ContestProblem.  # noqa: E501
        :type: int
        """

        self._source_size_limit = source_size_limit

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

        Successful submisions by unique users  # noqa: E501

        :return: The successful_submissions of this ContestProblem.  # noqa: E501
        :rtype: int
        """
        return self._successful_submissions

    @successful_submissions.setter
    def successful_submissions(self, successful_submissions):
        """Sets the successful_submissions of this ContestProblem.

        Successful submisions by unique users  # noqa: E501

        :param successful_submissions: The successful_submissions of this ContestProblem.  # noqa: E501
        :type: int
        """

        self._successful_submissions = successful_submissions

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

        Total submissions of the problem made.  # noqa: E501

        :return: The total_submissions of this ContestProblem.  # noqa: E501
        :rtype: float
        """
        return self._total_submissions

    @total_submissions.setter
    def total_submissions(self, total_submissions):
        """Sets the total_submissions of this ContestProblem.

        Total submissions of the problem made.  # noqa: E501

        :param total_submissions: The total_submissions of this ContestProblem.  # noqa: E501
        :type: float
        """

        self._total_submissions = total_submissions

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

        Partial submissions for the problem made.  # noqa: E501

        :return: The partial_submissions of this ContestProblem.  # noqa: E501
        :rtype: float
        """
        return self._partial_submissions

    @partial_submissions.setter
    def partial_submissions(self, partial_submissions):
        """Sets the partial_submissions of this ContestProblem.

        Partial submissions for the problem made.  # noqa: E501

        :param partial_submissions: The partial_submissions of this ContestProblem.  # noqa: E501
        :type: float
        """

        self._partial_submissions = partial_submissions

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

        Start time of the contest  # noqa: E501

        :return: The view_start of this ContestProblem.  # noqa: E501
        :rtype: str
        """
        return self._view_start

    @view_start.setter
    def view_start(self, view_start):
        """Sets the view_start of this ContestProblem.

        Start time of the contest  # noqa: E501

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

        self._view_start = view_start

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

        Submit start time of the contest  # noqa: E501

        :return: The submit_start of this ContestProblem.  # noqa: E501
        :rtype: str
        """
        return self._submit_start

    @submit_start.setter
    def submit_start(self, submit_start):
        """Sets the submit_start of this ContestProblem.

        Submit start time of the contest  # noqa: E501

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

        self._submit_start = submit_start

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

        Visible time of the contest  # noqa: E501

        :return: The visible_start of this ContestProblem.  # noqa: E501
        :rtype: str
        """
        return self._visible_start

    @visible_start.setter
    def visible_start(self, visible_start):
        """Sets the visible_start of this ContestProblem.

        Visible time of the contest  # noqa: E501

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

        self._visible_start = visible_start

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

        End time of the contest  # noqa: E501

        :return: The end of this ContestProblem.  # noqa: E501
        :rtype: str
        """
        return self._end

    @end.setter
    def end(self, end):
        """Sets the end of this ContestProblem.

        End time of the contest  # noqa: E501

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

        self._end = end

    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

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

        return self.__dict__ == other.__dict__

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