import EventEmitter from "eventemitter3";
import React from "react";
import { Page, Rest } from ".";
import { IMetaForm, IForm, IFormField, IError, IDepdendencyItem, IElementTypes, IFnTypes, TCondition } from "./common-interface";
import { IConfig, IField, IOption, ISchema, ITheme, IURLLoaderConfig, TParam } from "./model-interfaces";
export default class MetaForm implements IMetaForm {
    private schema;
    private eventEmitter;
    theme: ITheme;
    form: IForm;
    rest: Rest;
    page: Page;
    icons: IElementTypes | undefined;
    fns: IFnTypes | undefined;
    errorHandler: Function | undefined;
    controls: IElementTypes | undefined;
    controlElements: Record<string, React.FunctionComponent> | undefined;
    constructor(schema: ISchema, eventEmitter: EventEmitter);
    init(): void;
    /** page functions */
    getPage(): Page;
    setPage(page: Page): void;
    updatePage(pageNumber: number): void;
    setEndOfPage(pageNumber: number | undefined): void;
    resetEndOfPage(): void;
    /** event emitter functions */
    emit(eventType: string, payload: any): void;
    listener(eventType: string, fn: (...args: any[]) => void): void;
    removeListener(event: string, fn?: (...args: any[]) => void): void;
    destroy(): void;
    /** icons */
    getIcon(type: string): JSX.Element | "";
    setIcons(icons: IElementTypes): void;
    /** rest functions */
    getRestConfig(): IConfig;
    api(type: string, url: string, params?: Array<TParam>, currentValue?: any, sectionName?: string, isRemote?: boolean): Promise<any>;
    getData(config: IURLLoaderConfig, val: any, section: string, eventType?: string): Promise<Array<IOption>>;
    /** Theme functions */
    getThemeProp(themeName: string, prop: string): any;
    getSection(pageNumber: number): {} | null;
    setSection(section: string): void;
    initField(section: string, field: IField): void;
    getField(section: string, field: string): IFormField;
    setField(section: string, field: string, value: any): void;
    updateField(section: string, field: string, value: any): void;
    getFieldProp(section: string, field: string, prop: string): any;
    setFieldProp(section: string, field: string, prop: any, propVal: any): void;
    getFieldDisplay(section: string, field: string): any;
    setFieldDisplay(section: string, field: string, display: boolean): void;
    getFieldOptions(section: string, field: string): any;
    setFieldOptions(section: string, field: string, options: Array<any> | undefined): void;
    setFieldDisabled(section: string, field: string, disabled: boolean): void;
    getDependencies(section: string, field: string): any;
    getChangeEvents(section: string, field: string): any;
    applyDependencies(section: string, fields: Array<IField>): void;
    handleDependencies(section: string, fieldName: string, value: any, fieldDisplayed: boolean): Promise<unknown>;
    handleChangeEvents(gSection: string, gField: string, fieldValue?: any, fieldRef?: any): void;
    setDisplayTypeFieldProp(displayType: string, section: string, field: string, resultOptions: Array<any>, dependency: IDepdendencyItem): void;
    performDeepUpdate(section: string, field: string, value: any, ref: any): void;
    /** validation functions */
    setError(section: string, field: string, error: IError): void;
    validate(): boolean;
    parseCondition(condition: Array<TCondition>, section: string): any;
    /** Function mapper */
    getFn(fn: string): Function | null;
    setFns(fns: IFnTypes): void;
    /** Error handler */
    handleError(error: any, section: string, field: string): void;
    setErrorHandler(errorHandler: Function): void;
    getControl(displayType: string): JSX.Element;
    setControls(controls: IElementTypes): void;
    getControlElements(displayType: string): any;
    setControlElements(controlElements: Record<string, React.FunctionComponent>): void;
}
