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

import java.util.Objects;

/**
 * Ergebnis einer erfolgreich abgeschlossenen manuellen Dateiumbenennung.
 * <p>
 * Gibt an, dass die Zieldatei im Dateisystem erfolgreich umbenannt und der
 * Dokument-Stammsatz in der Persistenz aktualisiert wurde.
 *
 * @param previousFileName      der Dateiname (ohne Pfad) vor der Umbenennung; nie null
 * @param appliedFileName       der tatsächlich angewendete Dateiname (ohne Pfad) nach der
 *                              Umbenennung; kann bei Konflikten ein Suffix wie {@code (1)}
 *                              enthalten; nie null
 * @param conflictSuffixApplied {@code true} wenn dem gewünschten Basisdateinamen ein
 *                              Konflikt-Suffix angehängt wurde, weil der Wunschname bereits
 *                              durch eine andere Datei belegt war
 */
public record ManualFileRenameSuccess(
        String previousFileName,
        String appliedFileName,
        boolean conflictSuffixApplied) implements ManualFileRenameResult {

    /**
     * Kompakter Konstruktor zur Validierung der Pflichtfelder.
     *
     * @throws NullPointerException wenn {@code previousFileName} oder
     *                              {@code appliedFileName} null sind
     */
    public ManualFileRenameSuccess {
        Objects.requireNonNull(previousFileName, "previousFileName must not be null");
        Objects.requireNonNull(appliedFileName, "appliedFileName must not be null");
    }
}
