# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

from __future__ import annotations

from typing import Iterable
from typing_extensions import Literal

import httpx

from ....._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven
from ....._utils import maybe_transform, async_maybe_transform
from ....._compat import cached_property
from ....._resource import SyncAPIResource, AsyncAPIResource
from ....._response import (
    to_raw_response_wrapper,
    to_streamed_response_wrapper,
    async_to_raw_response_wrapper,
    async_to_streamed_response_wrapper,
)
from ....._base_client import make_request_options
from .....types.api.v2.customers import (
    lottery_entry_update_params,
    lottery_entry_alohomora_params,
    lottery_entry_update_batch_params,
    lottery_entry_lottery_entries_params,
)
from .....types.api.v2.customers.lottery_entry import LotteryEntry
from .....types.api.v2.customers.lottery_entry_alohomora_response import LotteryEntryAlohomoraResponse
from .....types.api.v2.customers.lottery_entry_update_batch_response import LotteryEntryUpdateBatchResponse
from .....types.api.v2.customers.lottery_entry_retrieve_lottery_entries_response import (
    LotteryEntryRetrieveLotteryEntriesResponse,
)

__all__ = ["LotteryEntriesResource", "AsyncLotteryEntriesResource"]


class LotteryEntriesResource(SyncAPIResource):
    @cached_property
    def with_raw_response(self) -> LotteryEntriesResourceWithRawResponse:
        """
        This property can be used as a prefix for any HTTP method call to return
        the raw response object instead of the parsed content.

        For more information, see https://www.github.com/alisytsma/ali-test-mcp#accessing-raw-response-data-eg-headers
        """
        return LotteryEntriesResourceWithRawResponse(self)

    @cached_property
    def with_streaming_response(self) -> LotteryEntriesResourceWithStreamingResponse:
        """
        An alternative to `.with_raw_response` that doesn't eagerly read the response body.

        For more information, see https://www.github.com/alisytsma/ali-test-mcp#with_streaming_response
        """
        return LotteryEntriesResourceWithStreamingResponse(self)

    def update(
        self,
        lottery_entry_id: int,
        *,
        customer_id: str,
        email: str | NotGiven = NOT_GIVEN,
        pickup_name: str | NotGiven = NOT_GIVEN,
        shared_on_facebook: bool | NotGiven = NOT_GIVEN,
        shared_on_instagram: bool | NotGiven = NOT_GIVEN,
        shared_on_twitter: bool | NotGiven = NOT_GIVEN,
        status: Literal["LOTTERY_DECLINED"] | NotGiven = NOT_GIVEN,
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> LotteryEntry:
        """Update a LotteryEntry resource by ID.

        Customers can modify email or pickupName,
        share on social media, or decline their winning entry.

        Args:
          email: Email address.

          shared_on_facebook: Whether or not the user shared the LotteryEntry on Facebook.

          shared_on_instagram: Whether or not the user shared the LotteryEntry on Instagram.

          shared_on_twitter: Whether or not the user shared the LotteryEntry on Twitter.

          status: Using this status client could decline lottery entry.

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        return self._patch(
            f"/api/v2/customers/{customer_id}/lotteryEntries/{lottery_entry_id}",
            body=maybe_transform(
                {
                    "email": email,
                    "pickup_name": pickup_name,
                    "shared_on_facebook": shared_on_facebook,
                    "shared_on_instagram": shared_on_instagram,
                    "shared_on_twitter": shared_on_twitter,
                    "status": status,
                },
                lottery_entry_update_params.LotteryEntryUpdateParams,
            ),
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=LotteryEntry,
        )

    def alohomora(
        self,
        customer_id: str,
        *,
        country_code: str,
        email: str,
        num_seats: int,
        phone: str,
        pickup_name: str,
        showtime_ids: Iterable[int],
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> LotteryEntryAlohomoraResponse:
        """Endpoint for group lottery entries, Harry Potter or otherwise.

        Enters the
        customer into the lotteries corresponding to the sent showtimes if the show
        supports group lottery, or is Harry Potter.

        Args:
          country_code: Country code.

          email: Email address.

          num_seats: The number of seats to enter for.

          phone: Phone number.

          pickup_name: Participant's pickup name.

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        return self._post(
            f"/api/v2/customers/{customer_id}/lotteryEntries/alohomora",
            body=maybe_transform(
                {
                    "country_code": country_code,
                    "email": email,
                    "num_seats": num_seats,
                    "phone": phone,
                    "pickup_name": pickup_name,
                    "showtime_ids": showtime_ids,
                },
                lottery_entry_alohomora_params.LotteryEntryAlohomoraParams,
            ),
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=LotteryEntryAlohomoraResponse,
        )

    def lottery_entries(
        self,
        customer_id: str,
        *,
        country_code: str,
        email: str,
        num_seats: int,
        phone: str,
        pickup_name: str,
        showtime_id: int,
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> LotteryEntry:
        """Create lottery entry object.

        Enter lottery flow.

        Args:
          country_code: Country code.

          email: Email address.

          num_seats: The number of seats to enter for.

          phone: Phone number.

          pickup_name: Participant's pickup name.

          showtime_id: Numeric identifier for a resource

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        return self._post(
            f"/api/v2/customers/{customer_id}/lotteryEntries",
            body=maybe_transform(
                {
                    "country_code": country_code,
                    "email": email,
                    "num_seats": num_seats,
                    "phone": phone,
                    "pickup_name": pickup_name,
                    "showtime_id": showtime_id,
                },
                lottery_entry_lottery_entries_params.LotteryEntryLotteryEntriesParams,
            ),
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=LotteryEntry,
        )

    def resend_confirmation_email(
        self,
        lottery_entry_id: int,
        *,
        customer_id: str,
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> None:
        """
        Send a new email related to this lottery entry.

        Args:
          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        extra_headers = {"Accept": "*/*", **(extra_headers or {})}
        return self._post(
            f"/api/v2/customers/{customer_id}/lotteryEntries/{lottery_entry_id}/resendConfirmationEmail",
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=NoneType,
        )

    def retrieve_lottery_entries(
        self,
        customer_id: str,
        *,
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> LotteryEntryRetrieveLotteryEntriesResponse:
        """
        Get lottery entries for valid lotteries

        - For WINNER, WAITING and PENDING status, return every entry.
        - For LOSER status, only return entries for last 7 days of performance
        - For all other statuses, do not return to clients. Note: Clients don't know
          about waiting status, so return PENDING status instead of waiting

        Args:
          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        return self._get(
            f"/api/v2/customers/{customer_id}/lotteryEntries",
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=LotteryEntryRetrieveLotteryEntriesResponse,
        )

    def update_batch(
        self,
        customer_id: str,
        *,
        ids: Iterable[int],
        shared_on_facebook: bool | NotGiven = NOT_GIVEN,
        shared_on_instagram: bool | NotGiven = NOT_GIVEN,
        shared_on_twitter: bool | NotGiven = NOT_GIVEN,
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> LotteryEntryUpdateBatchResponse:
        """Batch update a set of LotteryEntry resources.

        Right now, this is only supported
        for updating social shares on HP Lottery entries, and all LotteryEntry IDs must
        be for showtimes in the same LotteryGroup.

        Args:
          shared_on_facebook: Whether or not the user shared the LotteryEntries on Facebook.

          shared_on_instagram: Whether or not the user shared the LotteryEntry on Instagram.

          shared_on_twitter: Whether or not the user shared the LotteryEntries on Twitter.

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        return self._patch(
            f"/api/v2/customers/{customer_id}/lotteryEntries/batch",
            body=maybe_transform(
                {
                    "ids": ids,
                    "shared_on_facebook": shared_on_facebook,
                    "shared_on_instagram": shared_on_instagram,
                    "shared_on_twitter": shared_on_twitter,
                },
                lottery_entry_update_batch_params.LotteryEntryUpdateBatchParams,
            ),
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=LotteryEntryUpdateBatchResponse,
        )


class AsyncLotteryEntriesResource(AsyncAPIResource):
    @cached_property
    def with_raw_response(self) -> AsyncLotteryEntriesResourceWithRawResponse:
        """
        This property can be used as a prefix for any HTTP method call to return
        the raw response object instead of the parsed content.

        For more information, see https://www.github.com/alisytsma/ali-test-mcp#accessing-raw-response-data-eg-headers
        """
        return AsyncLotteryEntriesResourceWithRawResponse(self)

    @cached_property
    def with_streaming_response(self) -> AsyncLotteryEntriesResourceWithStreamingResponse:
        """
        An alternative to `.with_raw_response` that doesn't eagerly read the response body.

        For more information, see https://www.github.com/alisytsma/ali-test-mcp#with_streaming_response
        """
        return AsyncLotteryEntriesResourceWithStreamingResponse(self)

    async def update(
        self,
        lottery_entry_id: int,
        *,
        customer_id: str,
        email: str | NotGiven = NOT_GIVEN,
        pickup_name: str | NotGiven = NOT_GIVEN,
        shared_on_facebook: bool | NotGiven = NOT_GIVEN,
        shared_on_instagram: bool | NotGiven = NOT_GIVEN,
        shared_on_twitter: bool | NotGiven = NOT_GIVEN,
        status: Literal["LOTTERY_DECLINED"] | NotGiven = NOT_GIVEN,
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> LotteryEntry:
        """Update a LotteryEntry resource by ID.

        Customers can modify email or pickupName,
        share on social media, or decline their winning entry.

        Args:
          email: Email address.

          shared_on_facebook: Whether or not the user shared the LotteryEntry on Facebook.

          shared_on_instagram: Whether or not the user shared the LotteryEntry on Instagram.

          shared_on_twitter: Whether or not the user shared the LotteryEntry on Twitter.

          status: Using this status client could decline lottery entry.

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        return await self._patch(
            f"/api/v2/customers/{customer_id}/lotteryEntries/{lottery_entry_id}",
            body=await async_maybe_transform(
                {
                    "email": email,
                    "pickup_name": pickup_name,
                    "shared_on_facebook": shared_on_facebook,
                    "shared_on_instagram": shared_on_instagram,
                    "shared_on_twitter": shared_on_twitter,
                    "status": status,
                },
                lottery_entry_update_params.LotteryEntryUpdateParams,
            ),
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=LotteryEntry,
        )

    async def alohomora(
        self,
        customer_id: str,
        *,
        country_code: str,
        email: str,
        num_seats: int,
        phone: str,
        pickup_name: str,
        showtime_ids: Iterable[int],
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> LotteryEntryAlohomoraResponse:
        """Endpoint for group lottery entries, Harry Potter or otherwise.

        Enters the
        customer into the lotteries corresponding to the sent showtimes if the show
        supports group lottery, or is Harry Potter.

        Args:
          country_code: Country code.

          email: Email address.

          num_seats: The number of seats to enter for.

          phone: Phone number.

          pickup_name: Participant's pickup name.

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        return await self._post(
            f"/api/v2/customers/{customer_id}/lotteryEntries/alohomora",
            body=await async_maybe_transform(
                {
                    "country_code": country_code,
                    "email": email,
                    "num_seats": num_seats,
                    "phone": phone,
                    "pickup_name": pickup_name,
                    "showtime_ids": showtime_ids,
                },
                lottery_entry_alohomora_params.LotteryEntryAlohomoraParams,
            ),
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=LotteryEntryAlohomoraResponse,
        )

    async def lottery_entries(
        self,
        customer_id: str,
        *,
        country_code: str,
        email: str,
        num_seats: int,
        phone: str,
        pickup_name: str,
        showtime_id: int,
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> LotteryEntry:
        """Create lottery entry object.

        Enter lottery flow.

        Args:
          country_code: Country code.

          email: Email address.

          num_seats: The number of seats to enter for.

          phone: Phone number.

          pickup_name: Participant's pickup name.

          showtime_id: Numeric identifier for a resource

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        return await self._post(
            f"/api/v2/customers/{customer_id}/lotteryEntries",
            body=await async_maybe_transform(
                {
                    "country_code": country_code,
                    "email": email,
                    "num_seats": num_seats,
                    "phone": phone,
                    "pickup_name": pickup_name,
                    "showtime_id": showtime_id,
                },
                lottery_entry_lottery_entries_params.LotteryEntryLotteryEntriesParams,
            ),
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=LotteryEntry,
        )

    async def resend_confirmation_email(
        self,
        lottery_entry_id: int,
        *,
        customer_id: str,
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> None:
        """
        Send a new email related to this lottery entry.

        Args:
          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        extra_headers = {"Accept": "*/*", **(extra_headers or {})}
        return await self._post(
            f"/api/v2/customers/{customer_id}/lotteryEntries/{lottery_entry_id}/resendConfirmationEmail",
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=NoneType,
        )

    async def retrieve_lottery_entries(
        self,
        customer_id: str,
        *,
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> LotteryEntryRetrieveLotteryEntriesResponse:
        """
        Get lottery entries for valid lotteries

        - For WINNER, WAITING and PENDING status, return every entry.
        - For LOSER status, only return entries for last 7 days of performance
        - For all other statuses, do not return to clients. Note: Clients don't know
          about waiting status, so return PENDING status instead of waiting

        Args:
          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        return await self._get(
            f"/api/v2/customers/{customer_id}/lotteryEntries",
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=LotteryEntryRetrieveLotteryEntriesResponse,
        )

    async def update_batch(
        self,
        customer_id: str,
        *,
        ids: Iterable[int],
        shared_on_facebook: bool | NotGiven = NOT_GIVEN,
        shared_on_instagram: bool | NotGiven = NOT_GIVEN,
        shared_on_twitter: bool | NotGiven = NOT_GIVEN,
        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
        # The extra values given here take precedence over values defined on the client or passed to this method.
        extra_headers: Headers | None = None,
        extra_query: Query | None = None,
        extra_body: Body | None = None,
        timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
    ) -> LotteryEntryUpdateBatchResponse:
        """Batch update a set of LotteryEntry resources.

        Right now, this is only supported
        for updating social shares on HP Lottery entries, and all LotteryEntry IDs must
        be for showtimes in the same LotteryGroup.

        Args:
          shared_on_facebook: Whether or not the user shared the LotteryEntries on Facebook.

          shared_on_instagram: Whether or not the user shared the LotteryEntry on Instagram.

          shared_on_twitter: Whether or not the user shared the LotteryEntries on Twitter.

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not customer_id:
            raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}")
        return await self._patch(
            f"/api/v2/customers/{customer_id}/lotteryEntries/batch",
            body=await async_maybe_transform(
                {
                    "ids": ids,
                    "shared_on_facebook": shared_on_facebook,
                    "shared_on_instagram": shared_on_instagram,
                    "shared_on_twitter": shared_on_twitter,
                },
                lottery_entry_update_batch_params.LotteryEntryUpdateBatchParams,
            ),
            options=make_request_options(
                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
            ),
            cast_to=LotteryEntryUpdateBatchResponse,
        )


class LotteryEntriesResourceWithRawResponse:
    def __init__(self, lottery_entries: LotteryEntriesResource) -> None:
        self._lottery_entries = lottery_entries

        self.update = to_raw_response_wrapper(
            lottery_entries.update,
        )
        self.alohomora = to_raw_response_wrapper(
            lottery_entries.alohomora,
        )
        self.lottery_entries = to_raw_response_wrapper(
            lottery_entries.lottery_entries,
        )
        self.resend_confirmation_email = to_raw_response_wrapper(
            lottery_entries.resend_confirmation_email,
        )
        self.retrieve_lottery_entries = to_raw_response_wrapper(
            lottery_entries.retrieve_lottery_entries,
        )
        self.update_batch = to_raw_response_wrapper(
            lottery_entries.update_batch,
        )


class AsyncLotteryEntriesResourceWithRawResponse:
    def __init__(self, lottery_entries: AsyncLotteryEntriesResource) -> None:
        self._lottery_entries = lottery_entries

        self.update = async_to_raw_response_wrapper(
            lottery_entries.update,
        )
        self.alohomora = async_to_raw_response_wrapper(
            lottery_entries.alohomora,
        )
        self.lottery_entries = async_to_raw_response_wrapper(
            lottery_entries.lottery_entries,
        )
        self.resend_confirmation_email = async_to_raw_response_wrapper(
            lottery_entries.resend_confirmation_email,
        )
        self.retrieve_lottery_entries = async_to_raw_response_wrapper(
            lottery_entries.retrieve_lottery_entries,
        )
        self.update_batch = async_to_raw_response_wrapper(
            lottery_entries.update_batch,
        )


class LotteryEntriesResourceWithStreamingResponse:
    def __init__(self, lottery_entries: LotteryEntriesResource) -> None:
        self._lottery_entries = lottery_entries

        self.update = to_streamed_response_wrapper(
            lottery_entries.update,
        )
        self.alohomora = to_streamed_response_wrapper(
            lottery_entries.alohomora,
        )
        self.lottery_entries = to_streamed_response_wrapper(
            lottery_entries.lottery_entries,
        )
        self.resend_confirmation_email = to_streamed_response_wrapper(
            lottery_entries.resend_confirmation_email,
        )
        self.retrieve_lottery_entries = to_streamed_response_wrapper(
            lottery_entries.retrieve_lottery_entries,
        )
        self.update_batch = to_streamed_response_wrapper(
            lottery_entries.update_batch,
        )


class AsyncLotteryEntriesResourceWithStreamingResponse:
    def __init__(self, lottery_entries: AsyncLotteryEntriesResource) -> None:
        self._lottery_entries = lottery_entries

        self.update = async_to_streamed_response_wrapper(
            lottery_entries.update,
        )
        self.alohomora = async_to_streamed_response_wrapper(
            lottery_entries.alohomora,
        )
        self.lottery_entries = async_to_streamed_response_wrapper(
            lottery_entries.lottery_entries,
        )
        self.resend_confirmation_email = async_to_streamed_response_wrapper(
            lottery_entries.resend_confirmation_email,
        )
        self.retrieve_lottery_entries = async_to_streamed_response_wrapper(
            lottery_entries.retrieve_lottery_entries,
        )
        self.update_batch = async_to_streamed_response_wrapper(
            lottery_entries.update_batch,
        )
