import type { ObjeRecord } from "../commons/ObjeRecord";
import { Person } from '../commons/Person';
import { SplitGedcom } from "./SplitedInformations";
import { Place } from "../commons/Place";
import { type GedcomDatasetVersion } from "../utils/gedcom/datasetVersion";
import type { GedcomTransferProgressCallback } from "../utils/gedcom/transferProgress";
/**
 * Graphe importé depuis un fichier GEDCOM. Les enregistrements de niveau `0` non intégrés au modèle
 * typé (OBJE, REPO, SOUR, etc.) restent accessibles via {@link preservedTopLevelRecords}.
 */
export declare class ReadGed extends SplitGedcom {
    private resolvedInformationFamilies;
    private resolvedInformationNotes;
    private famPointerToId;
    private notePointerToId;
    /** Enregistrements `0 @O…@ OBJE` absorbés depuis le fichier (multi-`FILE`, `MEDI`, `TRAN`). */
    objeRecordsById: Map<number, ObjeRecord>;
    /** Déduit du bloc `HEAD` (`GEDC`.`VERS`). */
    datasetVersion: GedcomDatasetVersion;
    persons: Person[];
    mapPersons: Map<number, Person>;
    partnersMap: Map<number, Person[]>;
    childsMap: Map<number, Person[]>;
    mapFiles: Map<string, File>;
    placesMap: Map<string, Place>;
    /**
     * Index des pointeurs d’individu GEDCOM vers {@link Person.INDI} interne.
     * Clés typiques : `Homer_Simpson` (xref textuelle), `I12` (xref `@I12@`).
     */
    private individualPointerToIndiNumber;
    constructor(gedcomContent?: string, mapFiles?: Map<string, File>, placesMap?: Map<string, Place>, mapPersons?: Map<number, Person>);
    /**
     * Empty genealogy (no INDI/FAM), same runtime shape as after {@link importGedFile}:
     * `persons`, `partnersMap`, `childsMap`, `mapPersons`, `placesMap`, `mapFiles` are initialized.
     */
    static empty(options?: {
        mapFiles?: Map<string, File>;
        placesMap?: Map<string, Place>;
    }): ReadGed;
    static fromGedcomFile(gedcomFile: File, mapFiles?: Map<string, File>, placesMap?: Map<string, Place>, mapPersons?: Map<number, Person>, onProgress?: GedcomTransferProgressCallback, percentRange?: readonly [number, number]): Promise<ReadGed>;
    private finalizeAfterParse;
    /**
     * Reconstruit {@link partnersMap} et {@link childsMap} à partir des pointeurs `FAMS` / `FAMC`
     * de chaque personne. Peut être rappelé après édition des liens ; chaque appel remplace les
     * cartes (pas d’accumulation).
     */
    groupPartners(): void;
    /**
     * Complète les participants (`act.INDIS`) des actes d’union à partir des familles `FAMS`.
     * Appelé automatiquement après import ; peut être rappelé après restauration ou édition des liens.
     */
    enrichUnionActParticipants(): void;
    createDirectAncestries(person: Person): Person[];
    generateUniqueIndi(): number;
    /**
     * Résout un pointeur GEDCOM d’individu (`@Homer_Simpson@`, `Homer_Simpson`, `@I5@`, `I5`) vers la personne importée.
     * Utile pour interpréter `1 CHIL @…@` ou `1 HUSB @…@` dans des fichiers à xref textuelle.
     */
    resolveIndividualPointer(raw: string): Person | undefined;
    /** Enfants rattachés aux unions listées dans `parent.FAMS` (même logique que {@link childsMap}). */
    getChildrenForParent(parent: Person): Person[];
    /** Enfants d’une famille donnée (identifiant interne `F`, ex. `0` pour `@F0000@`). */
    getChildrenOfFamily(familyId: number): Person[];
    /**
     * Reconstruit {@link placesMap} à partir des lieux des actes (après édition du graphe).
     * Préférez la façade `editReadGed` pour les mutations ; cette méthode est utile si vous modifiez
     * les personnes hors façade.
     */
    rehydratePlacesFromActs(): void;
    private haveParentsOfPerson;
    private createPersons;
    /**
     * Xrefs textuelles `0 @Homer_Simpson@ INDI` → entiers uniques (après le max des `@I{n}@` du fichier).
     */
    private buildTextualIndiXrefToSyntheticIdMap;
    private buildPerson;
    private hydratePlacesFromActs;
    private upsertPlace;
    private linkPersonAsPartner;
    private linkPersonAsChild;
}
