import Foundation

/// Decides whether a (verb, tense) combo is eligible for the Full Table
/// practice mode. Pulled out of `PracticeSessionService` so the rule can be
/// unit tested in isolation.
public enum FullTableEligibility {

    /// `VerbForm.regularity` values understood by the data set.
    public enum Regularity: String, Sendable {
        case regular   // paradigm-teaching verbs (small curated set)
        case ordinary  // pattern-following verbs (the bulk of the dataset)
        case irregular
        case orto      // orthographic spelling change (e.g. busqué)
    }

    /// Returns true when the given (verb, tense) combo is a candidate for
    /// Full Table — i.e. it follows the regular pattern with no irregularity
    /// and no orthographic spelling change.
    ///
    /// The conjugation must be present in all 6 person slots; missing forms
    /// disqualify the combo.
    ///
    /// Accepted: `regular` (paradigm-teaching verbs) and `ordinary`
    /// (pattern-following verbs — `hablar`, `comer`, `vivir`, etc.).
    /// Rejected: `irregular` and `orto` (orthographic spelling changes).
    public static func isFullyRegular(regularities: [String]) -> Bool {
        guard regularities.count == 6 else { return false }
        let acceptable: Set<String> = ["regular", "ordinary"]
        return regularities.allSatisfy { acceptable.contains($0) }
    }
}
