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 SummarySuggestion(Model):
    """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).

    Do not edit the class manually.
    """

    def __init__(self, feature_id=None, suggested_summary=None, original_summary=None, status=None, baseline_status=None, reasoning=None, suggested_doc_links=None, version_token=None, created=None, updated=None):  # noqa: E501
        """SummarySuggestion - a model defined in OpenAPI

        :param feature_id: The feature_id of this SummarySuggestion.  # noqa: E501
        :type feature_id: int
        :param suggested_summary: The suggested_summary of this SummarySuggestion.  # noqa: E501
        :type suggested_summary: str
        :param original_summary: The original_summary of this SummarySuggestion.  # noqa: E501
        :type original_summary: str
        :param status: The status of this SummarySuggestion.  # noqa: E501
        :type status: str
        :param baseline_status: The baseline_status of this SummarySuggestion.  # noqa: E501
        :type baseline_status: str
        :param reasoning: The reasoning of this SummarySuggestion.  # noqa: E501
        :type reasoning: str
        :param suggested_doc_links: The suggested_doc_links of this SummarySuggestion.  # noqa: E501
        :type suggested_doc_links: List[str]
        :param version_token: The version_token of this SummarySuggestion.  # noqa: E501
        :type version_token: int
        :param created: The created of this SummarySuggestion.  # noqa: E501
        :type created: datetime
        :param updated: The updated of this SummarySuggestion.  # noqa: E501
        :type updated: datetime
        """
        self.openapi_types = {
            'feature_id': int,
            'suggested_summary': str,
            'original_summary': str,
            'status': str,
            'baseline_status': str,
            'reasoning': str,
            'suggested_doc_links': List[str],
            'version_token': int,
            'created': datetime,
            'updated': datetime
        }

        self.attribute_map = {
            'feature_id': 'feature_id',
            'suggested_summary': 'suggested_summary',
            'original_summary': 'original_summary',
            'status': 'status',
            'baseline_status': 'baseline_status',
            'reasoning': 'reasoning',
            'suggested_doc_links': 'suggested_doc_links',
            'version_token': 'version_token',
            'created': 'created',
            'updated': 'updated'
        }

        self._feature_id = feature_id
        self._suggested_summary = suggested_summary
        self._original_summary = original_summary
        self._status = status
        self._baseline_status = baseline_status
        self._reasoning = reasoning
        self._suggested_doc_links = suggested_doc_links
        self._version_token = version_token
        self._created = created
        self._updated = updated

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

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

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

        Associated feature identifier.  # noqa: E501

        :return: The feature_id of this SummarySuggestion.
        :rtype: int
        """
        return self._feature_id

    @feature_id.setter
    def feature_id(self, feature_id: int):
        """Sets the feature_id of this SummarySuggestion.

        Associated feature identifier.  # noqa: E501

        :param feature_id: The feature_id of this SummarySuggestion.
        :type feature_id: int
        """
        if feature_id is None:
            raise ValueError("Invalid value for `feature_id`, must not be `None`")  # noqa: E501
        if feature_id is not None and feature_id < 1:  # noqa: E501
            raise ValueError("Invalid value for `feature_id`, must be a value greater than or equal to `1`")  # noqa: E501

        self._feature_id = feature_id

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

        AI-suggested release notes summary text.  # noqa: E501

        :return: The suggested_summary of this SummarySuggestion.
        :rtype: str
        """
        return self._suggested_summary

    @suggested_summary.setter
    def suggested_summary(self, suggested_summary: str):
        """Sets the suggested_summary of this SummarySuggestion.

        AI-suggested release notes summary text.  # noqa: E501

        :param suggested_summary: The suggested_summary of this SummarySuggestion.
        :type suggested_summary: str
        """

        self._suggested_summary = suggested_summary

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

        Feature summary text active prior to AI generation, used for visual diffing and revert workflows.  # noqa: E501

        :return: The original_summary of this SummarySuggestion.
        :rtype: str
        """
        return self._original_summary

    @original_summary.setter
    def original_summary(self, original_summary: str):
        """Sets the original_summary of this SummarySuggestion.

        Feature summary text active prior to AI generation, used for visual diffing and revert workflows.  # noqa: E501

        :param original_summary: The original_summary of this SummarySuggestion.
        :type original_summary: str
        """

        self._original_summary = original_summary

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

        Lifecycle status of the summary suggestion: - PENDING: Awaiting review - APPLIED: Approved and applied to feature - REJECTED: Suggestion declined - DISCARDED: Obsolete or feature deleted   # noqa: E501

        :return: The status of this SummarySuggestion.
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status: str):
        """Sets the status of this SummarySuggestion.

        Lifecycle status of the summary suggestion: - PENDING: Awaiting review - APPLIED: Approved and applied to feature - REJECTED: Suggestion declined - DISCARDED: Obsolete or feature deleted   # noqa: E501

        :param status: The status of this SummarySuggestion.
        :type status: str
        """
        allowed_values = ["PENDING", "APPLIED", "REJECTED", "DISCARDED"]  # noqa: E501
        if status not in allowed_values:
            raise ValueError(
                "Invalid value for `status` ({0}), must be one of {1}"
                .format(status, allowed_values)
            )

        self._status = status

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

        WebDX Baseline interoperability state at suggestion generation time. Null if un-tracked.  # noqa: E501

        :return: The baseline_status of this SummarySuggestion.
        :rtype: str
        """
        return self._baseline_status

    @baseline_status.setter
    def baseline_status(self, baseline_status: str):
        """Sets the baseline_status of this SummarySuggestion.

        WebDX Baseline interoperability state at suggestion generation time. Null if un-tracked.  # noqa: E501

        :param baseline_status: The baseline_status of this SummarySuggestion.
        :type baseline_status: str
        """
        allowed_values = [None,"none", "limited", "newly", "widely"]  # noqa: E501
        if baseline_status not in allowed_values:
            raise ValueError(
                "Invalid value for `baseline_status` ({0}), must be one of {1}"
                .format(baseline_status, allowed_values)
            )

        self._baseline_status = baseline_status

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

        Grounding rationale and source links evaluated during generation.  # noqa: E501

        :return: The reasoning of this SummarySuggestion.
        :rtype: str
        """
        return self._reasoning

    @reasoning.setter
    def reasoning(self, reasoning: str):
        """Sets the reasoning of this SummarySuggestion.

        Grounding rationale and source links evaluated during generation.  # noqa: E501

        :param reasoning: The reasoning of this SummarySuggestion.
        :type reasoning: str
        """

        self._reasoning = reasoning

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

        List of verified external documentation links associated with the feature.  # noqa: E501

        :return: The suggested_doc_links of this SummarySuggestion.
        :rtype: List[str]
        """
        return self._suggested_doc_links

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

        List of verified external documentation links associated with the feature.  # noqa: E501

        :param suggested_doc_links: The suggested_doc_links of this SummarySuggestion.
        :type suggested_doc_links: List[str]
        """

        self._suggested_doc_links = suggested_doc_links

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

        Monotonically increasing Optimistic Concurrency Control (OCC) version counter. Increments on every mutation to prevent mid-air collision overwrites during concurrent editorial reviews. (TODO: Migrate to standard HTTP ETag / If-Match headers if the repo adopts header-based OCC across REST endpoints.)   # noqa: E501

        :return: The version_token of this SummarySuggestion.
        :rtype: int
        """
        return self._version_token

    @version_token.setter
    def version_token(self, version_token: int):
        """Sets the version_token of this SummarySuggestion.

        Monotonically increasing Optimistic Concurrency Control (OCC) version counter. Increments on every mutation to prevent mid-air collision overwrites during concurrent editorial reviews. (TODO: Migrate to standard HTTP ETag / If-Match headers if the repo adopts header-based OCC across REST endpoints.)   # noqa: E501

        :param version_token: The version_token of this SummarySuggestion.
        :type version_token: int
        """
        if version_token is None:
            raise ValueError("Invalid value for `version_token`, must not be `None`")  # noqa: E501
        if version_token is not None and version_token < 1:  # noqa: E501
            raise ValueError("Invalid value for `version_token`, must be a value greater than or equal to `1`")  # noqa: E501

        self._version_token = version_token

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

        UTC timestamp when the suggestion was created.  # noqa: E501

        :return: The created of this SummarySuggestion.
        :rtype: datetime
        """
        return self._created

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

        UTC timestamp when the suggestion was created.  # noqa: E501

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

        self._created = created

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

        UTC timestamp when the suggestion was last modified.  # noqa: E501

        :return: The updated of this SummarySuggestion.
        :rtype: datetime
        """
        return self._updated

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

        UTC timestamp when the suggestion was last modified.  # noqa: E501

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

        self._updated = updated
