import type { Message, RenderSceneObject, RenderProfileObject } from '../../../common/index.ts';
import type { EmptyPublishDef } from './empty.ts';
export * from './empty.ts';
import type { FacebookPublishDef } from './facebook.ts';
export * from './facebook.ts';
import type { FileLegacyPublishDef } from './file-legacy.ts';
export * from './file-legacy.ts';
import type { FilePublishDef } from './file.ts';
export * from './file.ts';
import type { ReportPublishDef } from './report.ts';
export * from './report.ts';
import type { YoutubePublishDef } from './youtube.ts';
export * from './youtube.ts';
import type { TelegramPublishDef } from './telegram.ts';
export * from './telegram.ts';
import type { JwPlayerPublishDef } from './jwplayer.ts';
export * from './jwplayer.ts';
type Union = EmptyPublishDef | ReportPublishDef | YoutubePublishDef | JwPlayerPublishDef | FacebookPublishDef | FilePublishDef | FileLegacyPublishDef | TelegramPublishDef;
export type PublishDefOfType<T extends string | null> = Union & {
    type: T;
};
export type PublishRecord = Union["publish"];
export type PublishStatsRecord = Union["stats"];
export type PublishMethodsRecord = Union["methods"];
export type PublishAcceptsProvidedRecord = Union["accepts"];
export interface PublishDomainRecords {
    [":publish"]: PublishRecord;
    [":publish.stats?"]: PublishStatsRecord;
    [":publish.methods?"]: PublishMethodsRecord;
    [":publish.accepts?"]: PublishAcceptsProvidedRecord;
}
export interface PublishDef<Type extends string | null> {
    type: Type;
    publish: PublishRecordBase & {
        type?: Type;
    };
    stats: PublishStatsRecordBase;
    methods: PublishDomainMethodsRecordBase;
    accepts: PublishDomainAcceptsProvidedRecordBase;
}
export interface PublishRecordBase {
    type?: string | null;
    asset?: string | null;
    connection?: string;
    render?: PublishRenderBase;
    draft?: unknown;
    published?: unknown;
    remote?: unknown;
    error?: {
        method: string;
    } | null;
    messages?: Message[];
}
/** render preset + overrides */
export interface PublishRenderBase {
    preset?: string;
    type: string;
    scene?: RenderSceneObject;
    profile?: RenderProfileObject;
}
export interface PublishDomainMethodsRecordBase {
    [key: string]: {
        rpcId: string;
        rpcData: unknown;
    };
}
export interface PublishDomainAcceptsProvidedRecordBase {
    value: string;
}
export interface PublishStatsRecordBase {
    status?: string;
    substatus?: string;
    messages?: Message[];
    retrieved?: unknown;
    defaults?: unknown;
}
