import { Acts } from './Act';
import { IndiAttribute } from "./IndiAttribute";
import type { ObjeRecord } from "./ObjeRecord";
import { MultimediaFile, MultimediaFiles } from "./MultimediaFile";
import { Notes } from "./Note";
import { PersonNameVariant } from "./PersonNameVariant";
export declare enum Sex {
    M = "M",
    F = "F",
    /** GEDCOM 7 « sexe inconnu ». */
    U = "U",
    /** GEDCOM 7 « non binaire » / intersexe selon fichier source. */
    X = "X"
}
export type PersonGedcomImportOptions = {
    famPointerToId?: ReadonlyMap<string, number>;
    notePointerToId?: ReadonlyMap<string, number>;
    objeRecordsById?: ReadonlyMap<number, ObjeRecord>;
};
export declare class Person {
    sosa: number | undefined;
    INDI: number;
    SEX: Sex | undefined;
    firstnames: Array<string>;
    lastname: string;
    FAMC?: number;
    FAMS: number[];
    private newMultimediaFiles;
    multimediaFiles: MultimediaFiles;
    acts: Acts;
    notes: Notes;
    /** Tous les blocs `1 NAME` (alias, traductions, etc.) ; vide si seulement le couple prénom/nom classique. */
    nameVariants: PersonNameVariant[];
    /** Attributs de niveau 1 (`FACT`, `DSCR`, …) avec sous-structures conservées. */
    attributes: IndiAttribute[];
    get files(): MultimediaFile[];
    get keysFiles(): string[];
    constructor(sosa?: number, SEX?: Sex, firstnames?: Array<string>, lastname?: string, FAMC?: number, FAMS?: number[], INDI?: number, multimediaFiles?: MultimediaFiles, newMultimediaFiles?: Map<string, MultimediaFile>, acts?: Acts, nameVariants?: PersonNameVariant[], attributes?: IndiAttribute[]);
    createPersonJson(personLines: string[], informationFamilies?: Map<number, string[]>, mapFiles?: Map<string, File>, globalNotes?: Map<number, string[]>, textualIndiXrefToIndi?: ReadonlyMap<string, number>, importOptions?: PersonGedcomImportOptions): void;
    private parsePersonLine;
    private createIndiFromZeroLine;
    private createSexFromValue;
    private createFAMCFromValue;
    private createFAMSFromValue;
    private createMultimediaFilesFromValue;
    private createMultimediaFromObjePointer;
    private addNoteFromGedcom;
    /**
     * Média au niveau individu (hors acte) : chemin logique `{INDI}/{nomFichier}`.
     * Si le même nom existe déjà pour cet individu, suffixe `_1`, `_2`, etc. avant l’extension.
     */
    addMultimedia(multimediaFile: MultimediaFile): void;
    /**
     * Média distant (`FILE` / OBJE avec URI) sans fichier local : chemins relatifs uniques comme {@link addMultimedia}.
     */
    addMultimediaFromUri(sourceUri: string, objeXrefId?: number | null): void;
    deleteMultimedia(path: string): void;
    /** Copie profonde avec un nouvel `INDI` (actes via {@link Act.clone}, notes, médias, variants, attributs). */
    clone(newIndi: number): Person;
    private createFirstnamesAndLastnameJson;
}
export declare class TreePerson extends Person {
    parents: Person[];
    childrens: Person[];
    constructor(person: Person, parents: Person[], childrens: Person[], currentSosa: number);
}
