ReadabilityMetrics.java

package com.kapil.verbametrics.domain;

/**
 * Domain record representing readability analysis results.
 *
 * @author Kapil Garg
 */
public record ReadabilityMetrics(
        double fleschKincaidScore,
        double fleschReadingEase,
        String readingLevel,
        String complexity,
        double averageSentenceLength,
        double averageSyllablesPerWord
) {

    public ReadabilityMetrics {
        BaseDomainResult.validateNonNegative(fleschKincaidScore, "Flesch-Kincaid score");
        BaseDomainResult.validateRange(fleschReadingEase, 0, 100, "Flesch Reading Ease");
        BaseDomainResult.validateNonNegative(averageSentenceLength, "Average sentence length");
        BaseDomainResult.validateNonNegative(averageSyllablesPerWord, "Average syllables per word");
    }

    @Override
    public String toString() {
        return """
                ReadabilityMetrics{
                    fleschKincaidScore=%.2f, fleschReadingEase=%.2f,
                    readingLevel='%s', complexity='%s',
                    avgSentenceLength=%.2f, avgSyllablesPerWord=%.2f
                }""".formatted(
                fleschKincaidScore, fleschReadingEase, readingLevel, complexity,
                averageSentenceLength, averageSyllablesPerWord
        );
    }

}