import type { Api, ApiMapper, AsyncFuncString, IServiceStore, RendererEnv, RendererEvent, RendererProps, SchemaBoolean, SchemaExpression, SchemaMessage } from 'jamis-core';
import type { BaseSchemaScoped, SchemaCollection, StaticControlSchemaBase } from '../types';
/**
 * Service 服务类控件。
 */
export interface ServiceSchema extends BaseSchemaScoped {
    /**
     * 指定为 Service 数据拉取控件。
     */
    type: 'service';
    /**
     * 页面初始化的时候，可以设置一个 API 让其取拉取，发送数据会携带当前 data 数据（包含地址栏参数），获取得数据会合并到 data 中，供组件内使用。
     */
    api?: Api | ApiMapper;
    /**
     * WebScocket 地址，用于实时获取数据
     */
    ws?: string;
    /**
     * 通过调用外部函数来获取数据
     */
    dataProvider?: ((data: Record<string, any>, setData: (data: Record<string, any>) => void, env: RendererEnv) => any) | AsyncFuncString;
    /**
     * 内容区域
     */
    body?: SchemaCollection;
    /**
     * @deprecated 改成 api 的 sendOn。
     */
    fetchOn?: SchemaExpression;
    /**
     * 是否默认就拉取？
     */
    initFetch?: boolean;
    /**
     * 是否默认就拉取？通过表达式来决定.
     *
     * @deprecated 改成 api 的 sendOn。
     */
    initFetchOn?: SchemaExpression;
    /**
     * 用来获取远程 Schema 的 api
     */
    schemaApi?: Api | ApiMapper;
    /**
     * 页面schema提供者, 和前面的schema/schemaApi互斥, 优先级从前往后
     */
    schemaProvider?: (data: Record<string, any>, store: IServiceStore) => Promise<SchemaCollection>;
    /**
     * 是否默认加载 schemaApi
     */
    initFetchSchema?: boolean;
    /**
     * 用表达式来配置。
     * @deprecated 改成 api 的 sendOn。
     */
    initFetchSchemaOn?: SchemaExpression;
    /**
     * 是否轮询拉取
     */
    interval?: number | string;
    /**
     * 是否静默拉取
     */
    silentPolling?: boolean;
    /**
     * 关闭轮询的条件。
     */
    stopAutoRefreshWhen?: SchemaExpression;
    messages?: SchemaMessage;
    /**
     * 当schema加载失败时, 显示错误信息到页面上
     */
    showSchemaError?: boolean;
    /**
     * 控制是否要显示loading
     */
    showLoading?: boolean;
    showLoadingOn?: SchemaBoolean;
}
export interface StaticServiceSchema extends Omit<ServiceSchema, 'type'>, StaticControlSchemaBase {
    type: 'static-service';
}
export interface ServiceProps extends RendererProps, Omit<ServiceSchema, 'type' | 'className' | 'data'> {
    store: IServiceStore;
    messages: SchemaMessage;
    dispatchEvent: (event: IServiceEvent, data?: any) => Promise<RendererEvent>;
}
export type IServiceEvent = 
/** schemaProvider调用成功 */
'schemaProviderInited'
/** api接口数据调用成功 */
 | 'fetchInited'
/** schemaApi调用成功 */
 | 'fetchSchemaInited';
