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

import java.util.Objects;

/**
 * Ergebnis, wenn die Persistenzaktualisierung nach erfolgreicher Dateikopie
 * fehlgeschlagen ist.
 * <p>
 * Gibt an, dass die Quelldatei zwar erfolgreich ins Zielverzeichnis kopiert werden
 * konnte, jedoch die anschließende Aktualisierung des Dokument-Stammsatzes in der
 * Persistenz fehlgeschlagen ist. Der Use-Case versucht in diesem Fall, die
 * geschriebene Zieldatei wieder zu entfernen (Best-Effort-Rollback).
 * <p>
 * Schlägt auch der Rollback fehl, wird dies auf ERROR-Ebene protokolliert. In jedem
 * Fall bleibt dieses Ergebnis die Rückgabe, sodass der Aufrufer den Benutzer
 * informieren kann.
 *
 * @param message menschenlesbare Beschreibung des Persistenzfehlers; nie null
 */
public record ManualFileCopyPersistenceFailure(String message) implements ManualFileCopyResult {

    /**
     * Kompakter Konstruktor zur Validierung des Pflichtfelds.
     *
     * @throws NullPointerException wenn {@code message} null ist
     */
    public ManualFileCopyPersistenceFailure {
        Objects.requireNonNull(message, "message must not be null");
    }
}
