package de.gecheckt.pdf.umbenenner.application.port.in;

/**
 * Versiegeltes Ergebnis-Interface für eine manuelle Dateikopie via
 * {@link ManualFileCopyUseCase}.
 * <p>
 * Mögliche Ergebnisse:
 * <ul>
 *   <li>{@link ManualFileCopySuccess} – die Quelldatei wurde unter dem gewünschten
 *       Namen (ggf. mit Suffix) ins Zielverzeichnis kopiert und der Dokument-Stammsatz
 *       auf {@code SUCCESS} aktualisiert.</li>
 *   <li>{@link ManualFileCopyNoOpIdenticalTarget} – im Zielverzeichnis liegt bereits
 *       eine Datei mit identischem Inhalt; es ist keine Kopie erforderlich, der
 *       Stammsatz wurde dennoch konsistent auf {@code SUCCESS} gehoben.</li>
 *   <li>{@link ManualFileCopyDocumentNotFound} – das Dokument wurde in der Persistenz
 *       nicht gefunden.</li>
 *   <li>{@link ManualFileCopyInvalidState} – das Dokument befindet sich in einem
 *       ungültigen Zustand für eine manuelle Kopie (z.&nbsp;B. bereits {@code SUCCESS}).</li>
 *   <li>{@link ManualFileCopyFileSystemFailure} – ein technischer Dateisystemfehler
 *       ist während der Kopie aufgetreten (z.&nbsp;B. Quelldatei nicht vorhanden,
 *       fehlende Schreibrechte, gesperrte Datei).</li>
 *   <li>{@link ManualFileCopyPersistenceFailure} – die Persistenzaktualisierung ist
 *       nach erfolgreicher Kopie fehlgeschlagen (Zieldatei wurde im Rahmen eines
 *       Best-Effort-Rollbacks gelöscht).</li>
 * </ul>
 */
public sealed interface ManualFileCopyResult
        permits ManualFileCopySuccess,
                ManualFileCopyNoOpIdenticalTarget,
                ManualFileCopyDocumentNotFound,
                ManualFileCopyInvalidState,
                ManualFileCopyFileSystemFailure,
                ManualFileCopyPersistenceFailure {
}
