import { describe, it, expect } from 'vitest'
import { conservativeVaClass } from '../va-classification'

describe('conservativeVaClass', () => {
  it('returns unknown for blank/nullish input', () => {
    expect(conservativeVaClass('')).toBe('unknown')
    expect(conservativeVaClass('   ')).toBe('unknown')
    expect(conservativeVaClass(null)).toBe('unknown')
    expect(conservativeVaClass(undefined)).toBe('unknown')
  })

  describe('nva — transport/logistics, rework, storage', () => {
    it.each([
      ['Transportsicherung entfernen'], // compound-word prefix must still match
      ['Bauteile transportieren zur nächsten Station'],
      ['Transport to warehouse'],
      ['Innerbetriebliche Logistik-Bereitstellung'],
      ['Logistics buffer replenishment'],
      ['Nacharbeit Grat entfernen'],
      ['Rework of surface defects'],
      ['Zwischenlagerung der Bauteile'], // "lager" mid-compound must still match
      ['Pufferstrecke vor Presse'],
      ['Cold storage'],
    ])('"%s" -> nva', (name) => {
      expect(conservativeVaClass(name)).toBe('nva')
    })
  })

  describe('nnva — inspection / measurement / control', () => {
    it.each([
      ['Sichtprüfung der Schweißnaht'], // "prüf" mid-compound must still match
      ['Inspektion der Baugruppe'],
      ['Final inspection'],
      ['Bauteil vermessen'],
      ['Messung der Wanddicke'],
      ['Messgerät kalibrieren'],
      ['Final quality control check'],
      ['Endkontrolle der Charge'], // "kontroll" mid-compound must still match
    ])('"%s" -> nnva', (name) => {
      expect(conservativeVaClass(name)).toBe('nnva')
    })
  })

  describe('never auto-va, and no accidental substring collisions -> unknown', () => {
    it.each([
      ['Bauteil schweißen'], // clearly value-adding-sounding — must still NOT be va
      ['Gehäuse montieren'],
      ['Schrauben anziehen'],
      ['Sprühfetten auftragen'], // must NOT trip the "mess" pattern
      ['Messerklinge schärfen'], // "Messer" (knife) must NOT trip the "mess" pattern
      ['Messestand aufbauen'], // "Messe" (trade fair) must NOT trip the "mess" pattern
    ])('"%s" -> unknown, never va', (name) => {
      const result = conservativeVaClass(name)
      expect(result).not.toBe('va')
      expect(result).toBe('unknown')
    })

    it('genuinely never returns "va" for any fixture in this file', () => {
      const allNames = [
        'Transportsicherung entfernen',
        'Sichtprüfung der Schweißnaht',
        'Bauteil schweißen',
        'Gehäuse montieren',
        '',
      ]
      for (const name of allNames) {
        expect(conservativeVaClass(name)).not.toBe('va')
      }
    })
  })

  it('when a name matches both groups, nnva wins (documented precedence)', () => {
    expect(conservativeVaClass('Transport zur Prüfung')).toBe('nnva')
  })
})
