import { FormikErrors } from 'formik';
import { ButtonProps, MessageProviderProps } from '../../../../ui/index.js';
import { ICustomSubmitProps } from './custom-submit/index.js';
import { IDefaultSchemas } from './form-handler/generate-schemas.js';
export type StateFormFormHandler = {
    state: 'loading' | 'default' | 'error' | 'send' | '';
    message: string;
};
export type OnSubmitConfiguration = {
    schema?: {
        verifyOnly?: string[];
    };
    extraData?: {
        [key in string]: any;
    };
};
export interface IFormHandler {
    registryName?: string;
    errorForm?: {
        mode?: "modal";
    };
    ref?: any;
    inputs?: {
        readOnly?: boolean;
    };
    i18n?: {
        active?: boolean;
    };
    errorMessage?: string;
    languageSelected?: string;
    updateOnInitialDataChange?: boolean;
    keepErrorsOnChange?: boolean;
    schema?: Record<string, any>;
    onSubmitConfiguration?: OnSubmitConfiguration;
    modifySchema?: ({ schema, data, }: {
        schema: IFormHandler['schema'];
        data?: Record<string, any>;
    }) => IFormHandler['schema'];
    onValidateSchema?: (erors: any) => void;
    recaptcha?: boolean | string;
    cloudFlare?: {
        secret: string;
    };
    decimalFields?: string[];
    formHandlerContextProps?: any;
    messageProvider?: MessageProviderProps;
    modifyInitialData?: (initialData: IFormHandler['initialData']) => any;
    onFinish?: (data: any, initialValues: any) => void;
    fileFields?: {
        ref: string;
        unique?: boolean;
        keyRef?: string;
        uniqueFields?: string[];
        fields: string[];
        onUpload?: (values: any, response: any, handlers?: {
            setFieldError: (field: string, message: string) => void;
            setFieldValue: (field: string, value: any, shouldValidate?: boolean) => Promise<void | FormikErrors<unknown>>;
        }, filesUplodaded?: any[]) => Promise<void>;
    };
    defaultSchemas?: IDefaultSchemas;
    isStickyButtons?: boolean;
    autoComplete?: 'on' | 'off';
    onSucess?: (data: any, handlers?: {
        setFieldError: (field: string, message: string) => void;
        setFieldValue: (field: string, value: any, shouldValidate?: boolean) => Promise<void | FormikErrors<unknown>>;
    }, initialValues?: any) => Promise<unknown>;
    button?: ButtonProps;
    children?: React.ReactNode;
    onChangeForm?: {
        callbackResult: (dataForm: any) => void;
        additionalDependencies?: any[];
    };
    customAction?: {
        props?: {
            [key: string]: any;
        };
        Component: (props: {
            values?: any;
            stateForm: StateFormFormHandler;
            handleSubmit?(action?: any): Promise<void>;
            setFieldValue: (field: string, value: any, shouldValidate?: boolean) => Promise<void | FormikErrors<unknown>>;
            clear: () => void;
        }) => React.ReactNode;
    };
    initialData?: {
        [key: string]: any;
    };
    customSubmit?: ICustomSubmitProps[];
    cleanFieldsOnSubmit?: boolean;
    debugMode?: boolean;
    disableEnterKeySubmitForm?: boolean;
    trackingEvent?: {
        /** Nome do evento disparado no window após envio bem-sucedido. Padrão: "infinity:form:submit" */
        name?: string;
        /** Desabilita o disparo do evento de rastreamento */
        disabled?: boolean;
    };
}
