"""
    HCL AppScan on Cloud (v2)

    This API allows you to interact with the service. The API allows you to perform many of the
    operations available in the UI and more.</br>For authentication, use the relevant APIs in
    the Account section. A successful authentication response includes a bearer token for use
    in subsequent API calls. Pasting this token in the 'Access token' field above will
    automatically add the authorization header to any API call that requires a valid session.

    OpenAPI spec version: v2

    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401
from datetime import datetime

from pyasoc.configuration import Configuration


class UtilitiesSharedModelsCorrelationGroupModel:
    """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 = {
        "id": "str",
        "application_id": "str",
        "status": "str",
        "severity": "str",
        "created_at": "datetime",
        "last_updated": "datetime",
        "last_found": "datetime",
        "api": "str",
        "issues_count": "int",
        "issue_type_id": "str",
        "issue_type": "str",
        "include_dast": "bool",
        "include_sast": "bool",
        "include_iast": "bool",
    }

    attribute_map = {
        "id": "Id",
        "application_id": "ApplicationId",
        "status": "Status",
        "severity": "Severity",
        "created_at": "CreatedAt",
        "last_updated": "LastUpdated",
        "last_found": "LastFound",
        "api": "Api",
        "issues_count": "IssuesCount",
        "issue_type_id": "IssueTypeId",
        "issue_type": "IssueType",
        "include_dast": "IncludeDast",
        "include_sast": "IncludeSast",
        "include_iast": "IncludeIast",
    }

    def __init__(
        self,
        id=None,
        application_id=None,
        status=None,
        severity=None,
        created_at=None,
        last_updated=None,
        last_found=None,
        api=None,
        issues_count=None,
        issue_type_id=None,
        issue_type=None,
        include_dast=None,
        include_sast=None,
        include_iast=None,
        _configuration=None,
    ):
        """UtilitiesSharedModelsCorrelationGroupModel - a model defined in Swagger"""
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._id = None
        self._application_id = None
        self._status = None
        self._severity = None
        self._created_at = None
        self._last_updated = None
        self._last_found = None
        self._api = None
        self._issues_count = None
        self._issue_type_id = None
        self._issue_type = None
        self._include_dast = None
        self._include_sast = None
        self._include_iast = None
        self.discriminator = None

        if id is not None:
            self.id = id
        if application_id is not None:
            self.application_id = application_id
        if status is not None:
            self.status = status
        if severity is not None:
            self.severity = severity
        if created_at is not None:
            self.created_at = created_at
        if last_updated is not None:
            self.last_updated = last_updated
        if last_found is not None:
            self.last_found = last_found
        if api is not None:
            self.api = api
        if issues_count is not None:
            self.issues_count = issues_count
        if issue_type_id is not None:
            self.issue_type_id = issue_type_id
        if issue_type is not None:
            self.issue_type = issue_type
        if include_dast is not None:
            self.include_dast = include_dast
        if include_sast is not None:
            self.include_sast = include_sast
        if include_iast is not None:
            self.include_iast = include_iast

    @property
    def id(self):
        # type: () -> str
        """Gets the id of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The id of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: str
        """
        return self._id

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


        :param id: The id of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: str
        """

        self._id = id

    @property
    def application_id(self):
        # type: () -> str
        """Gets the application_id of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The application_id of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: str
        """
        return self._application_id

    @application_id.setter
    def application_id(self, application_id):
        """Sets the application_id of this UtilitiesSharedModelsCorrelationGroupModel.


        :param application_id: The application_id of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: str
        """

        self._application_id = application_id

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


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

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


        :param status: The status of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: str
        """
        allowed_values = [
            "Open",
            "InProgress",
            "Reopened",
            "Noise",
            "Passed",
            "Fixed",
            "New",
        ]
        if self._configuration.client_side_validation and status not in allowed_values:
            raise ValueError(
                f"Invalid value for `status` ({status}), must be one of {allowed_values}"
            )

        self._status = status

    @property
    def severity(self):
        # type: () -> str
        """Gets the severity of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The severity of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: str
        """
        return self._severity

    @severity.setter
    def severity(self, severity):
        """Sets the severity of this UtilitiesSharedModelsCorrelationGroupModel.


        :param severity: The severity of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: str
        """
        allowed_values = [
            "Undetermined",
            "Informational",
            "Low",
            "Medium",
            "High",
            "Critical",
        ]
        if self._configuration.client_side_validation and severity not in allowed_values:
            raise ValueError(
                "Invalid value for `severity` ({}), must be one of {}".format(
                    severity, allowed_values
                )
            )

        self._severity = severity

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


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

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


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

        self._created_at = created_at

    @property
    def last_updated(self):
        # type: () -> datetime
        """Gets the last_updated of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The last_updated of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: datetime
        """
        return self._last_updated

    @last_updated.setter
    def last_updated(self, last_updated):
        """Sets the last_updated of this UtilitiesSharedModelsCorrelationGroupModel.


        :param last_updated: The last_updated of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: datetime
        """

        self._last_updated = last_updated

    @property
    def last_found(self):
        # type: () -> datetime
        """Gets the last_found of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The last_found of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: datetime
        """
        return self._last_found

    @last_found.setter
    def last_found(self, last_found):
        """Sets the last_found of this UtilitiesSharedModelsCorrelationGroupModel.


        :param last_found: The last_found of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: datetime
        """

        self._last_found = last_found

    @property
    def api(self):
        # type: () -> str
        """Gets the api of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The api of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: str
        """
        return self._api

    @api.setter
    def api(self, api):
        """Sets the api of this UtilitiesSharedModelsCorrelationGroupModel.


        :param api: The api of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: str
        """

        self._api = api

    @property
    def issues_count(self):
        # type: () -> int
        """Gets the issues_count of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The issues_count of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: int
        """
        return self._issues_count

    @issues_count.setter
    def issues_count(self, issues_count):
        """Sets the issues_count of this UtilitiesSharedModelsCorrelationGroupModel.


        :param issues_count: The issues_count of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: int
        """

        self._issues_count = issues_count

    @property
    def issue_type_id(self):
        # type: () -> str
        """Gets the issue_type_id of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The issue_type_id of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: str
        """
        return self._issue_type_id

    @issue_type_id.setter
    def issue_type_id(self, issue_type_id):
        """Sets the issue_type_id of this UtilitiesSharedModelsCorrelationGroupModel.


        :param issue_type_id: The issue_type_id of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: str
        """

        self._issue_type_id = issue_type_id

    @property
    def issue_type(self):
        # type: () -> str
        """Gets the issue_type of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The issue_type of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: str
        """
        return self._issue_type

    @issue_type.setter
    def issue_type(self, issue_type):
        """Sets the issue_type of this UtilitiesSharedModelsCorrelationGroupModel.


        :param issue_type: The issue_type of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: str
        """

        self._issue_type = issue_type

    @property
    def include_dast(self):
        # type: () -> bool
        """Gets the include_dast of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The include_dast of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: bool
        """
        return self._include_dast

    @include_dast.setter
    def include_dast(self, include_dast):
        """Sets the include_dast of this UtilitiesSharedModelsCorrelationGroupModel.


        :param include_dast: The include_dast of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: bool
        """

        self._include_dast = include_dast

    @property
    def include_sast(self):
        # type: () -> bool
        """Gets the include_sast of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The include_sast of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: bool
        """
        return self._include_sast

    @include_sast.setter
    def include_sast(self, include_sast):
        """Sets the include_sast of this UtilitiesSharedModelsCorrelationGroupModel.


        :param include_sast: The include_sast of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: bool
        """

        self._include_sast = include_sast

    @property
    def include_iast(self):
        # type: () -> bool
        """Gets the include_iast of this UtilitiesSharedModelsCorrelationGroupModel.


        :return: The include_iast of this UtilitiesSharedModelsCorrelationGroupModel.
        :rtype: bool
        """
        return self._include_iast

    @include_iast.setter
    def include_iast(self, include_iast):
        """Sets the include_iast of this UtilitiesSharedModelsCorrelationGroupModel.


        :param include_iast: The include_iast of this UtilitiesSharedModelsCorrelationGroupModel.
        :type: bool
        """

        self._include_iast = include_iast

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in self.swagger_types.items():
            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(UtilitiesSharedModelsCorrelationGroupModel, 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, UtilitiesSharedModelsCorrelationGroupModel):
            return False

        return self.to_dict() == other.to_dict()

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

        return self.to_dict() != other.to_dict()
