import { Application, Material, MaterialManager, Relations, ResourceUpdateInfo } from '@foxpage/foxpage-types';
import { ManagerBaseImpl } from '../common';
import { MaterialInstance } from './material';
/**
 * material manager
 *
 * @export
 * @class MaterialManager
 * @extends {ManagerBaseImpl}
 */
export declare class MaterialManagerImpl extends ManagerBaseImpl<Material> implements MaterialManager {
    /**
     * content id & fileId+locale map
     *
     * @private
     */
    private contentMap;
    constructor(app: Application);
    /**
     * add material to manager
     *
     * @param {Material} material
     */
    addMaterial(material: Material): MaterialInstance;
    /**
     * remove local material via materialKeys
     *
     * @param {string[]} materialKeys
     */
    removeMaterials(materialKeys: string[]): void;
    /**
     * get material from local first, not exist will fetch from server
     *
     * @param {string} materialFileIds fileId
     * @param {Record<string, any>} opt contain locale
     * @return {*}  {(Promise<Material | undefined>)}
     */
    getMaterial(materialFileIds: string, opt: Record<string, any>): Promise<Material | undefined>;
    /**
     * get materials
     *
     * @param {string[]} materialFileIds fileIds
     * @param {Record<string, any>} opt contain locale
     * @return {*}  {Promise<Material[]>}
     */
    getMaterials(materialFileIds: string[], opt: Record<string, any>): Promise<Material[]>;
    /**
     * fetch application material
     */
    freshMaterials(materialKey: string[]): Promise<Material[]>;
    protected onFetch(list: string[]): Promise<MaterialInstance[]>;
    protected onPull(data: ResourceUpdateInfo): Promise<void>;
    protected onStash(data: Relations): void;
    protected createInstance(data: Material): Promise<MaterialInstance>;
    private newMaterial;
    private addMaterialKeys;
    private removeMaterialKeys;
    private getMaterialIds;
    destroy(): void;
}
