PaginatedExtractionResult.java

package net.sasasin.sreader.service.extraction;

import java.util.List;
import java.util.Objects;

/**
 * Outcome of page-by-page text extraction over a successful AutoPagerize pagination result, with
 * per-page source metadata.
 */
public record PaginatedExtractionResult(
    TextExtractionOutcome outcome, List<PageTextContribution> contributions) {

  public PaginatedExtractionResult {
    Objects.requireNonNull(outcome, "outcome must not be null");
    Objects.requireNonNull(contributions, "contributions must not be null");
    contributions = List.copyOf(contributions);
  }

  public boolean mixedSources() {
    return contributions.stream().map(PageTextContribution::source).distinct().count() > 1;
  }
}