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

/**
 * Zusammenfassung eines abgeschlossenen Verarbeitungslaufs.
 * <p>
 * Enthält die aggregierten Zähler für erfolgreich verarbeitete,
 * fehlgeschlagene und übersprungene Dokumente. Ein No-op-Lauf –
 * bei dem keine Kandidaten im Quellordner gefunden wurden – wird
 * durch {@code RunSummary(0, 0, 0)} repräsentiert.
 *
 * @param successCount Anzahl der in diesem Lauf erfolgreich verarbeiteten Dokumente
 * @param failedCount  Anzahl der in diesem Lauf fehlgeschlagenen Dokumente
 *                     (retryable und final zusammengefasst)
 * @param skippedCount Anzahl der in diesem Lauf übersprungenen Dokumente
 *                     (bereits verarbeitet oder dauerhaft fehlgeschlagen)
 */
public record RunSummary(int successCount, int failedCount, int skippedCount) {

    /**
     * Prüft, ob dieser Lauf ein No-op-Lauf war, d.h. keine Dokumente
     * verarbeitet, fehlgeschlagen oder übersprungen wurden.
     *
     * @return {@code true}, wenn alle Zähler null sind
     */
    public boolean isNoOp() {
        return successCount == 0 && failedCount == 0 && skippedCount == 0;
    }

    /**
     * Erzeugt eine {@code RunSummary} für einen No-op-Lauf.
     *
     * @return {@code RunSummary} mit allen Zählern gleich null
     */
    public static RunSummary noOp() {
        return new RunSummary(0, 0, 0);
    }
}
