import { MemberNode } from '@humanwhocodes/momoa';
import { AnyTitle, Root, Attribute, Element } from '@lottiefiles/last';
import { VFile } from 'vfile';
import { ParseOptions } from './options.js';

/**
 * Copyright 2024 Design Barn Inc.
 */

declare class Slots {
    /**
     * Parser's VFile instance
     */
    readonly file: VFile;
    /**
     * SlotID.value to ParentTitle mapping
     */
    idTitles: Map<string, AnyTitle>;
    /**
     * SlotProperty node in the JSON AST
     */
    jsonNode: MemberNode | undefined;
    /**
     * Parser's options
     */
    readonly options: ParseOptions;
    /**
     * Slots Parent Node
     */
    parentNode: Root | undefined;
    constructor(vfile: VFile, options: ParseOptions);
    /**
     * If set, replaces the original Slots JSON node with a LAST node using collected SlotId parent titles.
     *
     * @returns void
     */
    mutate(): void;
    /**
     * Collects SlotID id and its Parent's Ancestor title for future mutations
     *
     * @param node - SlotID Node
     * @param ancestor - SlotID Parent's Ancestor Node
     */
    setIdTitle(node: Attribute, ancestor: Element): void;
    /**
     * Set Slots Node info for future mutations
     *
     * @param parentNode - SlotProperty parent node
     * @param jsonNode - SlotProperty node in the JSON AST
     * @returns void
     */
    setNodes(parentNode: Root, jsonNode: MemberNode): void;
}

export { Slots };
