import Testing
@testable import SharedModels

@Suite("FullTableEligibility")
struct FullTableEligibilityTests {

    // MARK: - Should be eligible

    @Test("all-ordinary verb (e.g. hablar present) is eligible")
    func allOrdinary() {
        // hablar present: hablo / hablas / habla / hablamos / habláis / hablan
        let r = Array(repeating: "ordinary", count: 6)
        #expect(FullTableEligibility.isFullyRegular(regularities: r))
    }

    @Test("all-regular paradigm verb (e.g. vivir present) is eligible")
    func allRegular() {
        // vivir present is tagged "regular" in the curated subset
        let r = Array(repeating: "regular", count: 6)
        #expect(FullTableEligibility.isFullyRegular(regularities: r))
    }

    @Test("mixed regular + ordinary across persons is eligible")
    func mixedRegularOrdinary() {
        // The data never actually mixes these, but it shouldn't matter if it
        // did — both labels mean "follows the regular pattern".
        let r = ["regular", "ordinary", "regular", "ordinary", "regular", "ordinary"]
        #expect(FullTableEligibility.isFullyRegular(regularities: r))
    }

    // MARK: - Should NOT be eligible

    @Test("any irregular form rejects the combo")
    func anyIrregular() {
        var r = Array(repeating: "ordinary", count: 6)
        r[3] = "irregular"
        #expect(!FullTableEligibility.isFullyRegular(regularities: r))
    }

    @Test("orthographic spelling change rejects the combo (excluded by design)")
    func anyOrto() {
        // buscar preterite: yo "busqué" carries an orto tag for the c→qu shift.
        // Per design choice, orto verbs are NOT eligible for Full Table.
        var r = Array(repeating: "ordinary", count: 6)
        r[0] = "orto"
        #expect(!FullTableEligibility.isFullyRegular(regularities: r))
    }

    @Test("all-irregular rejects")
    func allIrregular() {
        let r = Array(repeating: "irregular", count: 6)
        #expect(!FullTableEligibility.isFullyRegular(regularities: r))
    }

    // MARK: - Edge cases

    @Test("incomplete forms (fewer than 6 persons) are rejected")
    func incompleteForms() {
        let r = Array(repeating: "ordinary", count: 5)
        #expect(!FullTableEligibility.isFullyRegular(regularities: r))
    }

    @Test("empty input is rejected")
    func empty() {
        #expect(!FullTableEligibility.isFullyRegular(regularities: []))
    }

    @Test("unknown regularity value is rejected (defensive default)")
    func unknownValue() {
        var r = Array(repeating: "ordinary", count: 6)
        r[2] = "garbage_value"
        #expect(!FullTableEligibility.isFullyRegular(regularities: r))
    }
}
