# This file was auto-generated by Fern from our API Definition.

import typing

from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.request_options import RequestOptions
from ..types.delete_workspace_webhook_response_model import DeleteWorkspaceWebhookResponseModel
from ..types.patch_workspace_webhook_response_model import PatchWorkspaceWebhookResponseModel
from ..types.webhook_hmac_settings import WebhookHmacSettings
from ..types.workspace_create_webhook_response_model import WorkspaceCreateWebhookResponseModel
from ..types.workspace_webhook_list_response_model import WorkspaceWebhookListResponseModel
from .raw_client import AsyncRawWebhooksClient, RawWebhooksClient

# this is used as the default value for optional parameters
OMIT = typing.cast(typing.Any, ...)


class WebhooksClient:
    def __init__(self, *, client_wrapper: SyncClientWrapper):
        self._raw_client = RawWebhooksClient(client_wrapper=client_wrapper)

    @property
    def with_raw_response(self) -> RawWebhooksClient:
        """
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        RawWebhooksClient
        """
        return self._raw_client

    def list(
        self, *, include_usages: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None
    ) -> WorkspaceWebhookListResponseModel:
        """
        List all webhooks for a workspace

        Parameters
        ----------
        include_usages : typing.Optional[bool]
            Whether to include active usages of the webhook, only usable by admins

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        WorkspaceWebhookListResponseModel
            Successful Response

        Examples
        --------
        from elevenlabs import ElevenLabs

        client = ElevenLabs(
            api_key="YOUR_API_KEY",
        )
        client.webhooks.list(
            include_usages=False,
        )
        """
        _response = self._raw_client.list(include_usages=include_usages, request_options=request_options)
        return _response.data

    def create(
        self, *, settings: WebhookHmacSettings, request_options: typing.Optional[RequestOptions] = None
    ) -> WorkspaceCreateWebhookResponseModel:
        """
        Create a new webhook for the workspace with the specified authentication type.

        Parameters
        ----------
        settings : WebhookHmacSettings
            Webhook settings object containing auth_type and corresponding configuration

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        WorkspaceCreateWebhookResponseModel
            Successful Response

        Examples
        --------
        from elevenlabs import ElevenLabs, WebhookHmacSettings

        client = ElevenLabs(
            api_key="YOUR_API_KEY",
        )
        client.webhooks.create(
            settings=WebhookHmacSettings(
                name="name",
                webhook_url="webhook_url",
            ),
        )
        """
        _response = self._raw_client.create(settings=settings, request_options=request_options)
        return _response.data

    def delete(
        self, webhook_id: str, *, request_options: typing.Optional[RequestOptions] = None
    ) -> DeleteWorkspaceWebhookResponseModel:
        """
        Delete the specified workspace webhook

        Parameters
        ----------
        webhook_id : str
            The unique ID for the webhook

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        DeleteWorkspaceWebhookResponseModel
            Successful Response

        Examples
        --------
        from elevenlabs import ElevenLabs

        client = ElevenLabs(
            api_key="YOUR_API_KEY",
        )
        client.webhooks.delete(
            webhook_id="G007vmtq9uWYl7SUW9zGS8GZZa1K",
        )
        """
        _response = self._raw_client.delete(webhook_id, request_options=request_options)
        return _response.data

    def update(
        self,
        webhook_id: str,
        *,
        is_disabled: bool,
        name: str,
        retry_enabled: typing.Optional[bool] = OMIT,
        request_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> PatchWorkspaceWebhookResponseModel:
        """
        Update the specified workspace webhook

        Parameters
        ----------
        webhook_id : str
            The unique ID for the webhook

        is_disabled : bool
            Whether to disable or enable the webhook

        name : str
            The display name of the webhook (used for display purposes only).

        retry_enabled : typing.Optional[bool]
            Whether to enable automatic retries for transient failures (5xx, 429, timeout)

        request_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]]
            A list of request headers to include with the webhook delivery (optional)

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        PatchWorkspaceWebhookResponseModel
            Successful Response

        Examples
        --------
        from elevenlabs import ElevenLabs

        client = ElevenLabs(
            api_key="YOUR_API_KEY",
        )
        client.webhooks.update(
            webhook_id="G007vmtq9uWYl7SUW9zGS8GZZa1K",
            is_disabled=True,
            name="My Callback Webhook",
        )
        """
        _response = self._raw_client.update(
            webhook_id,
            is_disabled=is_disabled,
            name=name,
            retry_enabled=retry_enabled,
            request_headers=request_headers,
            request_options=request_options,
        )
        return _response.data


class AsyncWebhooksClient:
    def __init__(self, *, client_wrapper: AsyncClientWrapper):
        self._raw_client = AsyncRawWebhooksClient(client_wrapper=client_wrapper)

    @property
    def with_raw_response(self) -> AsyncRawWebhooksClient:
        """
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        AsyncRawWebhooksClient
        """
        return self._raw_client

    async def list(
        self, *, include_usages: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None
    ) -> WorkspaceWebhookListResponseModel:
        """
        List all webhooks for a workspace

        Parameters
        ----------
        include_usages : typing.Optional[bool]
            Whether to include active usages of the webhook, only usable by admins

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        WorkspaceWebhookListResponseModel
            Successful Response

        Examples
        --------
        import asyncio

        from elevenlabs import AsyncElevenLabs

        client = AsyncElevenLabs(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.webhooks.list(
                include_usages=False,
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.list(include_usages=include_usages, request_options=request_options)
        return _response.data

    async def create(
        self, *, settings: WebhookHmacSettings, request_options: typing.Optional[RequestOptions] = None
    ) -> WorkspaceCreateWebhookResponseModel:
        """
        Create a new webhook for the workspace with the specified authentication type.

        Parameters
        ----------
        settings : WebhookHmacSettings
            Webhook settings object containing auth_type and corresponding configuration

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        WorkspaceCreateWebhookResponseModel
            Successful Response

        Examples
        --------
        import asyncio

        from elevenlabs import AsyncElevenLabs, WebhookHmacSettings

        client = AsyncElevenLabs(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.webhooks.create(
                settings=WebhookHmacSettings(
                    name="name",
                    webhook_url="webhook_url",
                ),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.create(settings=settings, request_options=request_options)
        return _response.data

    async def delete(
        self, webhook_id: str, *, request_options: typing.Optional[RequestOptions] = None
    ) -> DeleteWorkspaceWebhookResponseModel:
        """
        Delete the specified workspace webhook

        Parameters
        ----------
        webhook_id : str
            The unique ID for the webhook

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        DeleteWorkspaceWebhookResponseModel
            Successful Response

        Examples
        --------
        import asyncio

        from elevenlabs import AsyncElevenLabs

        client = AsyncElevenLabs(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.webhooks.delete(
                webhook_id="G007vmtq9uWYl7SUW9zGS8GZZa1K",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.delete(webhook_id, request_options=request_options)
        return _response.data

    async def update(
        self,
        webhook_id: str,
        *,
        is_disabled: bool,
        name: str,
        retry_enabled: typing.Optional[bool] = OMIT,
        request_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> PatchWorkspaceWebhookResponseModel:
        """
        Update the specified workspace webhook

        Parameters
        ----------
        webhook_id : str
            The unique ID for the webhook

        is_disabled : bool
            Whether to disable or enable the webhook

        name : str
            The display name of the webhook (used for display purposes only).

        retry_enabled : typing.Optional[bool]
            Whether to enable automatic retries for transient failures (5xx, 429, timeout)

        request_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]]
            A list of request headers to include with the webhook delivery (optional)

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        PatchWorkspaceWebhookResponseModel
            Successful Response

        Examples
        --------
        import asyncio

        from elevenlabs import AsyncElevenLabs

        client = AsyncElevenLabs(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.webhooks.update(
                webhook_id="G007vmtq9uWYl7SUW9zGS8GZZa1K",
                is_disabled=True,
                name="My Callback Webhook",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.update(
            webhook_id,
            is_disabled=is_disabled,
            name=name,
            retry_enabled=retry_enabled,
            request_headers=request_headers,
            request_options=request_options,
        )
        return _response.data
