# coding: utf-8
# Copyright (c) 2016, 2026, Oracle and/or its affiliates.  All rights reserved.
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.

# NOTE: This class is auto generated by OracleSDKGenerator. DO NOT EDIT. API Version: 20201005

from .update_database_tools_mcp_toolset_details import UpdateDatabaseToolsMcpToolsetDetails
from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel  # noqa: F401
from oci.decorators import init_model_state_from_kwargs


@init_model_state_from_kwargs
class UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails(UpdateDatabaseToolsMcpToolsetDetails):
    """
    Database Tools MCP Toolset information to be updated for the Customizable reporting tools type.
    """

    #: A constant which can be used with the default_execution_type property of a UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
    #: This constant has a value of "SYNCHRONOUS"
    DEFAULT_EXECUTION_TYPE_SYNCHRONOUS = "SYNCHRONOUS"

    #: A constant which can be used with the default_execution_type property of a UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
    #: This constant has a value of "ASYNCHRONOUS"
    DEFAULT_EXECUTION_TYPE_ASYNCHRONOUS = "ASYNCHRONOUS"

    def __init__(self, **kwargs):
        """
        Initializes a new UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails object with values from keyword arguments. The default value of the :py:attr:`~oci.database_tools.models.UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.type` attribute
        of this class is ``CUSTOMIZABLE_REPORTING_TOOLS`` and it should not be changed.
        The following keyword arguments are supported (corresponding to the getters/setters of this class):

        :param version:
            The value to assign to the version property of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :type version: int

        :param display_name:
            The value to assign to the display_name property of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :type display_name: str

        :param description:
            The value to assign to the description property of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :type description: str

        :param defined_tags:
            The value to assign to the defined_tags property of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :type defined_tags: dict(str, dict(str, object))

        :param freeform_tags:
            The value to assign to the freeform_tags property of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :type freeform_tags: dict(str, str)

        :param type:
            The value to assign to the type property of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
            Allowed values for this property are: "CUSTOM_SQL_TOOL", "BUILT_IN_SQL_TOOLS", "CUSTOMIZABLE_REPORTING_TOOLS", "GENAI_SQL_ASSISTANT"
        :type type: str

        :param reports:
            The value to assign to the reports property of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :type reports: list[oci.database_tools.models.DatabaseToolsMcpToolsetCustomizableReportingToolsReport]

        :param tools:
            The value to assign to the tools property of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :type tools: list[oci.database_tools.models.UpdateDatabaseToolsMcpToolsetToolDetails]

        :param default_execution_type:
            The value to assign to the default_execution_type property of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
            Allowed values for this property are: "SYNCHRONOUS", "ASYNCHRONOUS"
        :type default_execution_type: str

        """
        self.swagger_types = {
            'version': 'int',
            'display_name': 'str',
            'description': 'str',
            'defined_tags': 'dict(str, dict(str, object))',
            'freeform_tags': 'dict(str, str)',
            'type': 'str',
            'reports': 'list[DatabaseToolsMcpToolsetCustomizableReportingToolsReport]',
            'tools': 'list[UpdateDatabaseToolsMcpToolsetToolDetails]',
            'default_execution_type': 'str'
        }
        self.attribute_map = {
            'version': 'version',
            'display_name': 'displayName',
            'description': 'description',
            'defined_tags': 'definedTags',
            'freeform_tags': 'freeformTags',
            'type': 'type',
            'reports': 'reports',
            'tools': 'tools',
            'default_execution_type': 'defaultExecutionType'
        }
        self._version = None
        self._display_name = None
        self._description = None
        self._defined_tags = None
        self._freeform_tags = None
        self._type = None
        self._reports = None
        self._tools = None
        self._default_execution_type = None
        self._type = 'CUSTOMIZABLE_REPORTING_TOOLS'

    @property
    def reports(self):
        """
        Gets the reports of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        List of Database Tools SQL Reports


        :return: The reports of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :rtype: list[oci.database_tools.models.DatabaseToolsMcpToolsetCustomizableReportingToolsReport]
        """
        return self._reports

    @reports.setter
    def reports(self, reports):
        """
        Sets the reports of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        List of Database Tools SQL Reports


        :param reports: The reports of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :type: list[oci.database_tools.models.DatabaseToolsMcpToolsetCustomizableReportingToolsReport]
        """
        self._reports = reports

    @property
    def tools(self):
        """
        Gets the tools of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        List of Database Tools CUSTOMIZABLE_REPORTING_TOOLS toolset tool configurations


        :return: The tools of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :rtype: list[oci.database_tools.models.UpdateDatabaseToolsMcpToolsetToolDetails]
        """
        return self._tools

    @tools.setter
    def tools(self, tools):
        """
        Sets the tools of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        List of Database Tools CUSTOMIZABLE_REPORTING_TOOLS toolset tool configurations


        :param tools: The tools of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :type: list[oci.database_tools.models.UpdateDatabaseToolsMcpToolsetToolDetails]
        """
        self._tools = tools

    @property
    def default_execution_type(self):
        """
        Gets the default_execution_type of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        The default execution type for the toolset. The default value is SYNCHRONOUS.

        To use ASYNCHRONOUS execution, the MCP Server must have the storage property configured.

        Allowed values for this property are: "SYNCHRONOUS", "ASYNCHRONOUS"


        :return: The default_execution_type of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :rtype: str
        """
        return self._default_execution_type

    @default_execution_type.setter
    def default_execution_type(self, default_execution_type):
        """
        Sets the default_execution_type of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        The default execution type for the toolset. The default value is SYNCHRONOUS.

        To use ASYNCHRONOUS execution, the MCP Server must have the storage property configured.


        :param default_execution_type: The default_execution_type of this UpdateDatabaseToolsMcpToolsetCustomizableReportingToolsDetails.
        :type: str
        """
        allowed_values = ["SYNCHRONOUS", "ASYNCHRONOUS"]
        if not value_allowed_none_or_none_sentinel(default_execution_type, allowed_values):
            raise ValueError(
                f"Invalid value for `default_execution_type`, must be None or one of {allowed_values}"
            )
        self._default_execution_type = default_execution_type

    def __repr__(self):
        return formatted_flat_dict(self)

    def __eq__(self, other):
        if other is None:
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not self == other
