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

import java.util.Objects;

/**
 * Ergebnis, wenn das Dokument sich in einem ungültigen Zustand für eine manuelle
 * Umbenennung befindet.
 * <p>
 * Eine Umbenennung ist nur möglich, wenn das Dokument den Status
 * {@link de.gecheckt.pdf.umbenenner.domain.model.ProcessingStatus#SUCCESS} hat und
 * ein gültiger {@code lastTargetFileName} sowie {@code lastTargetPath} vorhanden sind.
 * Dieses Ergebnis wird zurückgegeben, wenn eine dieser Voraussetzungen nicht erfüllt ist,
 * z. B.:
 * <ul>
 *   <li>der Status ist nicht {@code SUCCESS} (z. B. {@code FAILED_FINAL}), oder</li>
 *   <li>{@code lastTargetFileName} oder {@code lastTargetPath} ist {@code null}.</li>
 * </ul>
 *
 * @param reason menschenlesbare Begründung für den ungültigen Zustand; nie null
 */
public record ManualFileRenameInvalidState(String reason) implements ManualFileRenameResult {

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