import { ReactElement } from 'react'

export {}

declare global {
  type EpicFormBuilderPlugin = {
    name: string
    url: string
  }

  interface Grecaptcha {
    ready: (callback: () => void) => void;
    render: (container: string | HTMLElement, parameters: RenderParameters) => number;
    reset: (optWidgetId?: number) => void;
    execute: (optWidgetId?: number, optParams?: ExecuteParameters) => Promise<string>;
    getResponse: (optWidgetId?: number) => string;
  }

  interface RenderParameters {
    sitekey: string;
    theme?: "light" | "dark";
    size?: "compact" | "normal" | "invisible";
    tabindex?: number;
    callback?: (token: string) => void;
    "expired-callback"?: () => void;
    "error-callback"?: () => void;
  }

  interface ExecuteParameters {
    action?: string;
  }

  interface Window {
    grecaptcha: Grecaptcha
    __EPICFORMBUILDER__: {
      __WP_API__: any
      __USER__: {
        id: number
        name: string
        email: string
        capabilities: Record<string, boolean>
        plan: any
      }
      __WP_SETTINGS__?: {
        siteUrl: string
        homeUrl: string
        restUrl: string
        nonce: string
        wpApiNamespace: string
      }
      __NAMED_ROUTES__: Map<string, string>
      __ROUTER__: any
      __PLUGINS__: Array<EpicFormBuilderPlugin>
      __REACTHOOKFORM__: any
      __REACTREDUX__: any
      __COMPONENTS__?: Map<string, ReactElement>
      __REACTDOM__: any
      __REACT__: any
      __DATA__?: any
      __API__?: any
    }
  }
}
