import { DateAct } from "./DateAct";
import { Place } from "./Place";
import { GEDCOM_7_ALL_EVENT_TAGS } from "./gedcomEventTags";
import type { ObjeRecord } from "./ObjeRecord";
import { MultimediaFile, MultimediaFiles } from "./MultimediaFile";
import { Notes } from "./Note";
export type TypeAct = (typeof GEDCOM_7_ALL_EVENT_TAGS)[number];
export type ActConstructionOptions = {
    /** GEDCOM 7 `1 EVEN` text payload (only used when `type` is `EVEN`). */
    evenDescription?: string | null;
    /** GEDCOM 7 required `2 TYPE` under `EVEN` (individual or family). */
    evenTypeLabel?: string | null;
    /** GEDCOM 7 `2 SDATE` (+ `3 TIME` / `3 PHRASE` importés comme pour `DATE`). */
    sdateAct?: DateAct | null;
    /** GEDCOM 7 `2 PHRASE` directement sous l’événement. */
    eventPhrases?: readonly string[] | null;
    /** Sous-lignes non modélisées avant la première balise d’ancrage (`DATE`, `PLAC`, …). */
    preservedSubrecordPrefix?: readonly string[] | null;
    /** Sous-lignes non modélisées après la première balise d’ancrage. */
    preservedSubrecordSuffix?: readonly string[] | null;
};
export declare class Act {
    type: TypeAct;
    dateAct?: DateAct | null;
    place: Place | null;
    INDIS: number[];
    evenDescription?: string | null;
    evenTypeLabel?: string | null;
    /** GEDCOM 7 `2 SDATE` (sous-structure analogue à `DATE`). */
    sdateAct?: DateAct | null;
    /** GEDCOM 7 `2 PHRASE` au niveau 2 sous l’événement. */
    eventPhrases: string[];
    /**
     * Sous-lignes d’événement non modélisées (ex. `2 HUSB`, `4 PHRASE` sous `AGE`, `3 DATE` sous `STAT`, …),
     * conservées pour limiter la perte à l’import / export.
     */
    preservedSubrecordPrefix: string[];
    preservedSubrecordSuffix: string[];
    private newMultimediaFiles;
    multimediaFiles: MultimediaFiles;
    notes: Notes;
    get files(): MultimediaFile[];
    get keysFiles(): string[];
    constructor(type: TypeAct, dateAct?: DateAct | null, place?: Place | null, indis?: number[] | null, multimediaFiles?: MultimediaFiles | null, newMultimediaFiles?: Map<string, MultimediaFile>, notes?: Notes, options?: ActConstructionOptions | null);
    /**
     * Média rattaché à l’acte : `{indi}/{type}/{nomFichier}` (indi = premier INDI connu ou paramètre).
     * Suffixe `_1`, `_2`, … avant l’extension si le chemin est déjà pris sur cet acte.
     */
    addMultimedia(multimediaFile: MultimediaFile, ownerIndi?: number): void;
    /**
     * Média distant (URI) sans fichier local ; `ownerIndi` requis si {@link INDIS} est vide.
     */
    addMultimediaFromUri(sourceUri: string, ownerIndi?: number, objeXrefId?: number | null): void;
    removeMultimedia(index: number): void;
    /** Copie profonde de l’acte (nouvelle instance, mêmes valeurs). */
    clone(): Act;
    updateType(typeAct: TypeAct): void;
    addIndis(INDIS: number[]): void;
    updatePlace(place: Place | null): void;
    updateDateAct(dateAct: DateAct | null): void;
    /** Remplace ou efface la date de tri `SDATE`. */
    updateSdateAct(sdateAct: DateAct | null): void;
}
export declare class Acts {
    list: Act[];
    add(act: Act): void;
    updateFromIndex(act: Act, indexAct: number): void;
    removeFromIndex(indexAct: number): void;
    removeAll(): void;
    sortByDate(): void;
    /** Date utilisée pour le tri : `DATE` si exploitable, sinon `SDATE`. */
    private sortDateAct;
    private hasSortableDate;
    private compareByTypeOrder;
    private compareMarriageAndDivorce;
    private haveSameParticipants;
}
export declare class ActsByExtraction extends Acts {
    extractActsInfo(lines: string[], INDIS: number[], mapFiles: Map<string, File>, objeRecordsById?: ReadonlyMap<number, ObjeRecord>, textualIndiXrefToIndi?: ReadonlyMap<string, number>, globalNotes?: Map<number, string[]>, importOptions?: {
        notePointerToId?: ReadonlyMap<string, number>;
    }): void;
    private convertToActs;
    private resolveTypeAct;
}
