package de.gecheckt.pdf.umbenenner.adapter.in.gui;

import java.util.List;

import javafx.stage.FileChooser;

/**
 * Funktionales Interface fuer den Datei-Auswaehldialog der GUI.
 * <p>
 * Kapselt die Abhaengigkeit zum nativen {@link FileChooser} in einem
 * injizierbaren Hook, der in Tests durch eine einfache Lambda-Implementierung
 * ersetzt werden kann. Die Standardimplementierung oeffnet einen echten
 * nativen Datei-Dialog; Test-Stubs koennen einen festen Pfad zurueckgeben
 * oder {@code null} simulieren (Abbrechen).
 * <p>
 * Im Gegensatz zur frueheren {@code BiFunction}-Variante nimmt dieser Hook
 * auch die Liste der {@link FileChooser.ExtensionFilter} entgegen, damit der
 * native Dialog die Filter tatsaechlich anwenden kann.
 */
@FunctionalInterface
interface FilePickerDialog {

    /**
     * Oeffnet den Datei-Auswaehldialog und gibt den ausgewaehlten absoluten
     * Pfad zurueck.
     *
     * @param title       der Titel des Dialogs
     * @param initialPath der Anfangspfad als Hinweis; darf leer oder {@code null} sein
     * @param filters     Liste der Dateitypfilter; darf leer sein, aber nicht {@code null}
     * @return der ausgewaehlte absolute Pfad als String, oder {@code null} wenn abgebrochen
     */
    String pick(String title, String initialPath, List<FileChooser.ExtensionFilter> filters);
}
