import type { Message, Nxtpression } from '../../../common/index.ts';
import type { PublishDef, PublishRecordBase, PublishRenderBase, PublishStatsRecordBase } from './index.ts';
export interface FilePublishDef extends PublishDef<"file"> {
    publish: FilePublishRecord;
    stats: FilePublishStatsRecord;
}
export interface FilePublishRecord extends PublishRecordBase {
    type?: "file";
    directory?: string;
    filename?: string;
    renders?: Record<string, FilePublishRender>;
    draft?: FilePublishDraft;
    remote?: FilePublishRemote;
    published?: FilePublishPublished;
}
export type FilePublishRender = Nxtpression<ResolvedFilePublishRender, {
    publish: FilePublishRecord;
    directory: string;
    name: string;
}>;
export interface ResolvedFilePublishRender extends PublishRenderBase {
    name?: string;
    path: string;
    collisionStrategy?: "overwrite" | "skip";
    ignoreEmptyScene?: boolean;
}
export interface FilePublishPublished {
    directory?: string;
    filename: string;
}
export interface FilePublishDraft {
    directory?: string;
    filename?: string;
}
export interface FilePublishRemote {
    directory?: string;
    filename?: string;
    renders?: Record<string, FilePublishRemoteRender>;
}
export interface FilePublishRemoteRender {
    path?: string;
    messages?: Message[];
    query?: unknown;
    size?: number;
    hash?: string;
    source?: string;
}
export interface FilePublishStatsRecord extends PublishStatsRecordBase {
    retrieved?: FilePublishRetrieved;
    defaults?: FilePublishDefaults;
}
export interface FilePublishRetrieved {
    filename?: string;
    directory?: string;
    renders?: Record<string, FilePublishRetrievedRender>;
}
export interface FilePublishRetrievedRender {
    path: string;
    size?: number;
    hash?: string;
}
export interface FilePublishDefaults {
    directory: string;
    filename: string;
    renders: Record<string, FilePublishRender>;
}
