// Tests for per-file DE/EN/mixed language detection (KAR-905 / P3.1).
// Synthetic sheet-name/template inputs only.

import { describe, expect, it } from 'vitest'
import { detectQafFileLanguage } from '../language-detection'

describe('detectQafFileLanguage', () => {
  it('detects DE from a Fertigungskosten tab name', () => {
    const r = detectQafFileLanguage({ sheetNames: ['SUMMARY', 'Fertigungskosten', 'MATERIAL'] })
    expect(r.language).toBe('de')
    expect(r.signals).toEqual([{ source: 'sheet:Fertigungskosten', language: 'de' }])
  })

  it('detects EN from a Manufacturing costs tab name', () => {
    const r = detectQafFileLanguage({ sheetNames: ['SUMMARY', 'Manufacturing costs', 'MATERIAL'] })
    expect(r.language).toBe('en')
  })

  it('detects EN from the documented "Manufactering costs" BMW typo tab name', () => { // allow-customer-string
    const r = detectQafFileLanguage({ sheetNames: ['SUMMARY', 'Manufactering costs'] })
    expect(r.language).toBe('en')
  })

  it('detects DE from the legacy "Zusammenfassung" tab name alone', () => {
    const r = detectQafFileLanguage({ sheetNames: ['Zusammenfassung', 'Fertigungskosten'] })
    expect(r.language).toBe('de')
  })

  it('detects DE from summaryTemplate=QAF_LEGACY_DE_SUMMARY even without a Zusammenfassung sheet name in the list', () => {
    const r = detectQafFileLanguage({ sheetNames: ['SUMMARY'], summaryTemplate: 'QAF_LEGACY_DE_SUMMARY' })
    expect(r.language).toBe('de')
    expect(r.signals).toEqual([{ source: 'summaryTemplate:QAF_LEGACY_DE_SUMMARY', language: 'de' }])
  })

  it('does NOT treat QAF_V9_SUMMARY as an EN signal (V9 SUMMARY tab is locale-invariant)', () => {
    const r = detectQafFileLanguage({ sheetNames: ['SUMMARY', 'MATERIAL'], summaryTemplate: 'QAF_V9_SUMMARY' })
    expect(r.language).toBe('unknown')
    expect(r.signals).toEqual([])
  })

  it('returns unknown with no signals when nothing carries a language marker', () => {
    const r = detectQafFileLanguage({ sheetNames: ['SUMMARY', 'MATERIAL', 'SBM-DEVICES-FWZ'] })
    expect(r.language).toBe('unknown')
    expect(r.signals).toEqual([])
  })

  it('returns mixed when sheet names disagree (a genuinely reassembled/inconsistent file)', () => {
    const r = detectQafFileLanguage({ sheetNames: ['Fertigungskosten', 'Manufacturing costs'] })
    expect(r.language).toBe('mixed')
    expect(r.signals).toHaveLength(2)
  })

  it('does not fabricate a language when the workbook has no sheets at all', () => {
    const r = detectQafFileLanguage({ sheetNames: [] })
    expect(r.language).toBe('unknown')
  })
})
