/**
 * A status of an action.
 */
export type ActionStatus = 'not_started' | 'pending' | 'resolved' | 'rejected';

/**
 * A callback to be executed when an action is ready.
 */
export type ReadyCallback = () => void;

/**
 * An action is a single function that needs to be executed to determine if the app is ready.
 */
export type ReadyAction = () => unknown | Promise<unknown>;

/**
 * A map of action statuses by their name.
 */
export type ActionsStatus = {
    [key in ActionStatus]?: string[];
};

/**
 * A beacon is a single action that needs to be executed to determine if the app is ready.
 */
export interface Beacon {
    name: string;
    action: ReadyAction;
    status: ActionStatus;
    callbacks: ReadyCallback[];
    debug?: boolean;
}
/**
 * A map of beacons by their name.
 */
export interface BeaconsMap {
    [name: string]: Beacon;
}
