import { IDKitErrorCodes, IDKitRequestConfig, Preset, IDKitResult } from '@worldcoin/idkit-core';
export { ConstraintNode, CredentialType, IDKit, IDKitErrorCode, IDKitErrorCodes, IDKitRequestConfig, IDKitResult, Preset, ResponseItemV3, ResponseItemV4, RpContext, documentLegacy, orbLegacy, secureDocumentLegacy, signRequest } from '@worldcoin/idkit-core';
import { ReactElement } from 'react';

type PollingConfig = {
    polling?: {
        interval?: number;
        timeout?: number;
    };
};
type IDKitHookResult<TResult> = {
    open: () => void;
    reset: () => void;
    isAwaitingUserConnection: boolean;
    isAwaitingUserConfirmation: boolean;
    isSuccess: boolean;
    isError: boolean;
    connectorURI: string | null;
    result: TResult | null;
    errorCode: IDKitErrorCodes | null;
    isOpen: boolean;
};

type IDKitRequestHookConfig = IDKitRequestConfig & PollingConfig & {
    preset: Preset;
};
type UseIDKitRequestHookResult = IDKitHookResult<IDKitResult>;

type SupportedLanguage = "en" | "es" | "th";

type MaybePromise<T> = Promise<T> | T;
type WidgetSharedProps<TResult> = {
    open: boolean;
    onOpenChange: (open: boolean) => void;
    onSuccess?: (result: TResult) => MaybePromise<void>;
    onError?: (errorCode: IDKitErrorCodes) => MaybePromise<void>;
    autoClose?: boolean;
    language?: SupportedLanguage;
};
type IDKitRequestWidgetProps = IDKitRequestHookConfig & WidgetSharedProps<IDKitResult>;

declare function useIDKitRequest(config: IDKitRequestHookConfig): UseIDKitRequestHookResult;

declare function IDKitRequestWidget({ open, onOpenChange, onSuccess, onError, autoClose, language, ...config }: IDKitRequestWidgetProps): ReactElement | null;

export { type IDKitHookResult, type IDKitRequestHookConfig, IDKitRequestWidget, type IDKitRequestWidgetProps, type PollingConfig, type SupportedLanguage, type UseIDKitRequestHookResult, useIDKitRequest };
