package de.gecheckt.pdf.umbenenner.domain.model;

/**
 * Sealed interface representing the outcome of PDF text extraction.
 * <p>
 * This interface uses Java 17+ sealed types to enforce exhaustive case handling.
 * There are exactly three allowed implementations:
 * <ul>
 *   <li>{@link PdfExtractionSuccess}: Text and page count were successfully extracted</li>
 *   <li>{@link PdfExtractionContentError}: PDF exists but is not extractable (content problem)</li>
 *   <li>{@link PdfExtractionTechnicalError}: Technical failure during extraction (I/O, etc.)</li>
 * </ul>
 * <p>
 * Design principles:
 * <ul>
 *   <li>No exceptions thrown: results are encoded in the type system</li>
 *   <li>Exhaustive: pattern matching forces handling of all cases</li>
 *   <li>Distinct error types: allows retry logic to differentiate recoverable from non-recoverable</li>
 *   <li>No PDFBox or filesystem types: pure domain representation</li>
 * </ul>
 */
public sealed interface PdfExtractionResult
    permits PdfExtractionSuccess, PdfExtractionContentError, PdfExtractionTechnicalError {
    // Marker interface; concrete implementations define structure
}
