import { type AppEntity } from "../core";
import type { Entity, EntityManager } from "../data";
import { type FileUploadedEventData, Storage } from "../media";
import { Module } from "../modules/Module";
import { type FieldSchema } from "../data/prototype";
import { type mediaConfigSchema } from "./media-schema";
export type MediaFieldSchema = FieldSchema<typeof AppMedia.mediaFields>;
declare module "../core" {
    interface Media extends AppEntity, MediaFieldSchema {
    }
    interface DB {
        media: Media;
    }
}
export declare class AppMedia extends Module<typeof mediaConfigSchema> {
    private _storage?;
    build(): Promise<void>;
    getSchema(): import("@sinclair/typebox").TObject<{
        enabled: import("@sinclair/typebox").TBoolean;
        basepath: import("@sinclair/typebox").TString;
        entity_name: import("@sinclair/typebox").TString;
        storage: import("@sinclair/typebox").TObject<{
            body_max_size: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
        }>;
        adapter: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TObject<{
            type: import("@sinclair/typebox").TLiteral<string>;
            config: import("@sinclair/typebox").TObject<import("@sinclair/typebox").TProperties>;
        }>[]>>;
    }>;
    get basepath(): string;
    get storage(): Storage;
    uploadedEventDataToMediaPayload(info: FileUploadedEventData): MediaFieldSchema;
    static mediaFields: {
        path: import("../data").TextField<true>;
        folder: import("../data").BooleanField<false> & {
            required: () => import("../data").BooleanField<true>;
        };
        mime_type: import("../data").TextField<false> & {
            required: () => import("../data").TextField<true>;
        };
        size: import("../data").NumberField<false> & {
            required: () => import("../data").NumberField<true>;
        };
        scope: import("../data").TextField<false> & {
            required: () => import("../data").TextField<true>;
        };
        etag: import("../data").TextField<false> & {
            required: () => import("../data").TextField<true>;
        };
        modified_at: import("../data").DateField<false> & {
            required: () => import("../data").DateField<true>;
        };
        reference: import("../data").TextField<false> & {
            required: () => import("../data").TextField<true>;
        };
        entity_id: import("../data").NumberField<false> & {
            required: () => import("../data").NumberField<true>;
        };
        metadata: import("../data").JsonField<false, object> & {
            required: () => import("../data").JsonField<true, object>;
        };
    };
    getMediaEntity(forceCreate?: boolean): Entity<"media", typeof AppMedia.mediaFields>;
    get em(): EntityManager;
    private setupListeners;
    getOverwritePaths(): RegExp[];
    toJSON(secrets?: boolean): (ReturnType<this["getSchema"]> & {
        params: [];
    })["static"];
}
