import type { TemplateLayout, TemplateProperty } from './template.ts';
import type { JsonValue } from '../../common/index.ts';
export interface EventDomainRecords {
    ":event": EventRecord;
    ":event._template?": EventTemplateRecord;
    ":event.overlay?": EventOverlayRecord;
    ":event.template?": EventTemplateRecord;
    ":event.duration?": EventDurationRecord;
    ":event.children?": EventChildrenRecord;
    ":event.props?": EventPropsRecord;
    ":event.stats?": EventStatsRecord;
    ":event.status?": EventStatusRecord;
    ":event.schedule?": EventScheduleRecord;
    ":event.readDuration?": EventReadDurationRecord;
    ":event.readRate?": EventReadRateRecord;
}
export interface EventRecord {
    start?: number | null;
    end?: number | null;
    duration?: number | null;
    position?: string;
    text?: string;
    lang?: string;
    style?: string;
    styleOverrides?: SubtitleEventStyleOverrides;
    tagPrefix?: string;
    tagPrefixes?: string[];
}
export interface EventTemplateRecord {
    mixin?: string[];
    properties?: Record<string, TemplateProperty>;
    layout?: TemplateLayout;
    controller?: string;
}
export interface EventDurationRecord {
    scheduled?: number;
    actual?: number;
    in?: number;
    out?: number | null;
}
export interface EventChildrenRecord {
    value: string[];
}
type EventProps = {
    source?: string;
    cueCard?: boolean | string;
    printRundownColor?: string;
    startTime?: number;
    shotboxGroup?: string | string[];
    shotboxVisible?: boolean;
};
export type EventPropsRecord = EventProps & Record<Exclude<string, keyof EventProps>, JsonValue>;
export interface EventStatsRecord {
    type?: string;
}
export interface EventStatusRecord {
    messages?: Array<{
        id: string;
        msg: string;
        level: number;
        code?: string;
        expose?: boolean | null;
        index?: number | null;
        data?: {
            progress?: number | null;
        };
    }>;
}
export interface EventOverlayRecord {
    [eventId: string]: {
        data: EventPropsRecord;
    };
}
export interface EventReadDurationRecord {
    numChars?: number;
    numWords?: number;
    readRate?: number;
    readDuration?: number;
    readType?: ReadType;
}
export interface EventReadRateRecord {
    readRate?: number;
    readType?: ReadType;
}
export interface SubtitleEventStyleOverrides {
    marginL?: string;
    marginR?: string;
    marginV?: string;
    alignment?: string;
    fontname?: string;
    fontsize?: string;
    primaryColour?: string;
    secondaryColour?: string;
    outlineColour?: string;
    backColour?: string;
    bold?: string;
    italic?: string;
    underline?: string;
    strikeOut?: string;
    xbord?: string;
    ybord?: string;
}
export type ReadType = "characters" | "words" | "wordsPerMinute";
export interface EventScheduleRecord {
    startTime?: number;
    transition?: boolean;
    transitionTime?: number;
    transitionDuration?: number;
    endTime?: number;
}
export {};
