from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from chromestatus_openapi.models.base_model import Model
from chromestatus_openapi import util


class LinkPreviewGithubIssueAllOfInformation(Model):
    """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).

    Do not edit the class manually.
    """

    def __init__(self, url=None, number=None, title=None, user_login=None, state=None, state_reason=None, assignee_login=None, created_at=None, updated_at=None, closed_at=None, labels=None):  # noqa: E501
        """LinkPreviewGithubIssueAllOfInformation - a model defined in OpenAPI

        :param url: The url of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :type url: str
        :param number: The number of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :type number: int
        :param title: The title of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :type title: str
        :param user_login: The user_login of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :type user_login: str
        :param state: The state of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :type state: str
        :param state_reason: The state_reason of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :type state_reason: str
        :param assignee_login: The assignee_login of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :type assignee_login: str
        :param created_at: The created_at of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :type created_at: datetime
        :param updated_at: The updated_at of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :type updated_at: datetime
        :param closed_at: The closed_at of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :type closed_at: datetime
        :param labels: The labels of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :type labels: List[str]
        """
        self.openapi_types = {
            'url': str,
            'number': int,
            'title': str,
            'user_login': str,
            'state': str,
            'state_reason': str,
            'assignee_login': str,
            'created_at': datetime,
            'updated_at': datetime,
            'closed_at': datetime,
            'labels': List[str]
        }

        self.attribute_map = {
            'url': 'url',
            'number': 'number',
            'title': 'title',
            'user_login': 'user_login',
            'state': 'state',
            'state_reason': 'state_reason',
            'assignee_login': 'assignee_login',
            'created_at': 'created_at',
            'updated_at': 'updated_at',
            'closed_at': 'closed_at',
            'labels': 'labels'
        }

        self._url = url
        self._number = number
        self._title = title
        self._user_login = user_login
        self._state = state
        self._state_reason = state_reason
        self._assignee_login = assignee_login
        self._created_at = created_at
        self._updated_at = updated_at
        self._closed_at = closed_at
        self._labels = labels

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

        :param dikt: A dict.
        :type: dict
        :return: The LinkPreviewGithubIssue_allOf_information of this LinkPreviewGithubIssueAllOfInformation.  # noqa: E501
        :rtype: LinkPreviewGithubIssueAllOfInformation
        """
        return util.deserialize_model(dikt, cls)

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


        :return: The url of this LinkPreviewGithubIssueAllOfInformation.
        :rtype: str
        """
        return self._url

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


        :param url: The url of this LinkPreviewGithubIssueAllOfInformation.
        :type url: str
        """

        self._url = url

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


        :return: The number of this LinkPreviewGithubIssueAllOfInformation.
        :rtype: int
        """
        return self._number

    @number.setter
    def number(self, number: int):
        """Sets the number of this LinkPreviewGithubIssueAllOfInformation.


        :param number: The number of this LinkPreviewGithubIssueAllOfInformation.
        :type number: int
        """

        self._number = number

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


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

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


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

        self._title = title

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


        :return: The user_login of this LinkPreviewGithubIssueAllOfInformation.
        :rtype: str
        """
        return self._user_login

    @user_login.setter
    def user_login(self, user_login: str):
        """Sets the user_login of this LinkPreviewGithubIssueAllOfInformation.


        :param user_login: The user_login of this LinkPreviewGithubIssueAllOfInformation.
        :type user_login: str
        """

        self._user_login = user_login

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


        :return: The state of this LinkPreviewGithubIssueAllOfInformation.
        :rtype: str
        """
        return self._state

    @state.setter
    def state(self, state: str):
        """Sets the state of this LinkPreviewGithubIssueAllOfInformation.


        :param state: The state of this LinkPreviewGithubIssueAllOfInformation.
        :type state: str
        """
        allowed_values = ["open", "closed"]  # noqa: E501
        if state not in allowed_values:
            raise ValueError(
                "Invalid value for `state` ({0}), must be one of {1}"
                .format(state, allowed_values)
            )

        self._state = state

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


        :return: The state_reason of this LinkPreviewGithubIssueAllOfInformation.
        :rtype: str
        """
        return self._state_reason

    @state_reason.setter
    def state_reason(self, state_reason: str):
        """Sets the state_reason of this LinkPreviewGithubIssueAllOfInformation.


        :param state_reason: The state_reason of this LinkPreviewGithubIssueAllOfInformation.
        :type state_reason: str
        """
        allowed_values = ["completed", "reopened", "not_planned"]  # noqa: E501
        if state_reason not in allowed_values:
            raise ValueError(
                "Invalid value for `state_reason` ({0}), must be one of {1}"
                .format(state_reason, allowed_values)
            )

        self._state_reason = state_reason

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


        :return: The assignee_login of this LinkPreviewGithubIssueAllOfInformation.
        :rtype: str
        """
        return self._assignee_login

    @assignee_login.setter
    def assignee_login(self, assignee_login: str):
        """Sets the assignee_login of this LinkPreviewGithubIssueAllOfInformation.


        :param assignee_login: The assignee_login of this LinkPreviewGithubIssueAllOfInformation.
        :type assignee_login: str
        """

        self._assignee_login = assignee_login

    @property
    def created_at(self) -> datetime:
        """Gets the created_at of this LinkPreviewGithubIssueAllOfInformation.


        :return: The created_at of this LinkPreviewGithubIssueAllOfInformation.
        :rtype: datetime
        """
        return self._created_at

    @created_at.setter
    def created_at(self, created_at: datetime):
        """Sets the created_at of this LinkPreviewGithubIssueAllOfInformation.


        :param created_at: The created_at of this LinkPreviewGithubIssueAllOfInformation.
        :type created_at: datetime
        """

        self._created_at = created_at

    @property
    def updated_at(self) -> datetime:
        """Gets the updated_at of this LinkPreviewGithubIssueAllOfInformation.


        :return: The updated_at of this LinkPreviewGithubIssueAllOfInformation.
        :rtype: datetime
        """
        return self._updated_at

    @updated_at.setter
    def updated_at(self, updated_at: datetime):
        """Sets the updated_at of this LinkPreviewGithubIssueAllOfInformation.


        :param updated_at: The updated_at of this LinkPreviewGithubIssueAllOfInformation.
        :type updated_at: datetime
        """

        self._updated_at = updated_at

    @property
    def closed_at(self) -> datetime:
        """Gets the closed_at of this LinkPreviewGithubIssueAllOfInformation.


        :return: The closed_at of this LinkPreviewGithubIssueAllOfInformation.
        :rtype: datetime
        """
        return self._closed_at

    @closed_at.setter
    def closed_at(self, closed_at: datetime):
        """Sets the closed_at of this LinkPreviewGithubIssueAllOfInformation.


        :param closed_at: The closed_at of this LinkPreviewGithubIssueAllOfInformation.
        :type closed_at: datetime
        """

        self._closed_at = closed_at

    @property
    def labels(self) -> List[str]:
        """Gets the labels of this LinkPreviewGithubIssueAllOfInformation.


        :return: The labels of this LinkPreviewGithubIssueAllOfInformation.
        :rtype: List[str]
        """
        return self._labels

    @labels.setter
    def labels(self, labels: List[str]):
        """Sets the labels of this LinkPreviewGithubIssueAllOfInformation.


        :param labels: The labels of this LinkPreviewGithubIssueAllOfInformation.
        :type labels: List[str]
        """

        self._labels = labels
