import type * as React from "react"

import {
    BottomSheetToolboxComposer,
    type BottomSheetToolboxComposerProps,
    type BottomSheetToolboxComposerRef,
} from "./bottom-sheet-toolbox-composer"
import {BottomSheetToolboxBackdropProvider} from "./components"
import {
    BottomSheetToolboxInternalProvider,
    type BottomSheetToolboxInternalProviderProps,
} from "./context/bottom-sheet-toolbox-internal-context"

export type BottomSheetToolboxRef = BottomSheetToolboxComposerRef

export type BottomSheetToolboxProps = BottomSheetToolboxComposerProps &
    Pick<BottomSheetToolboxInternalProviderProps, "reset"> & {
        ref?: React.ForwardedRef<BottomSheetToolboxRef> | undefined
    }

export function BottomSheetToolboxProvider({
    reset = false,
    children,
}: BottomSheetToolboxInternalProviderProps) {
    return (
        <BottomSheetToolboxBackdropProvider inheritHide>
            <BottomSheetToolboxInternalProvider reset={reset}>
                {children}
            </BottomSheetToolboxInternalProvider>
        </BottomSheetToolboxBackdropProvider>
    )
}

/**
 * An easy pre-configured component for creating bottom sheets.
 * Wraps the BottomSheetToolboxComposer with the required internal context.
 */
export function BottomSheetToolbox({reset = false, ref, ...rest}: BottomSheetToolboxProps) {
    return (
        <BottomSheetToolboxProvider reset={reset}>
            <BottomSheetToolboxComposer ref={ref} {...rest} />
        </BottomSheetToolboxProvider>
    )
}
