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

import java.util.Objects;

import de.gecheckt.pdf.umbenenner.domain.model.DocumentFingerprint;

/**
 * Anfrage an den {@link ManualFileRenameUseCase} zum manuellen Umbenennen einer Zieldatei.
 * <p>
 * Der Benutzer gibt im GUI ausschließlich den Basistitel ohne {@code .pdf}-Endung an.
 * Der Use-Case hängt die Erweiterung selbst an.
 *
 * @param fingerprint        Inhalts-Fingerabdruck des Dokuments, das umbenannt werden soll;
 *                           nie null
 * @param desiredBaseFileName gewünschter Basisdateiname ohne {@code .pdf}-Endung;
 *                            nie null; darf nicht leer oder nur aus Leerzeichen bestehen
 */
public record ManualFileRenameRequest(
        DocumentFingerprint fingerprint,
        String desiredBaseFileName) {

    /**
     * Kompakter Konstruktor zur Validierung der Pflichtfelder.
     *
     * @throws NullPointerException     wenn {@code fingerprint} oder
     *                                  {@code desiredBaseFileName} null sind
     * @throws IllegalArgumentException wenn {@code desiredBaseFileName} leer ist
     */
    public ManualFileRenameRequest {
        Objects.requireNonNull(fingerprint, "fingerprint must not be null");
        Objects.requireNonNull(desiredBaseFileName, "desiredBaseFileName must not be null");
        if (desiredBaseFileName.isBlank()) {
            throw new IllegalArgumentException("desiredBaseFileName must not be blank");
        }
    }
}
