// Tests for lib/lsc/tooltips.ts — pure resolve/map logic (locale + fallback).

import { describe, it, expect } from 'vitest'
import { resolveTooltip, buildTooltipMap, type TooltipRow } from '../tooltips'

const row = (over: Partial<TooltipRow> = {}): TooltipRow => ({
  tooltip_key: 'workshop.observed_ct',
  label_de: 'Beobachtete CT [s]',
  label_en: 'Observed CT [s]',
  content_de: 'Gemessene Zykluszeit.',
  content_en: 'Measured cycle time.',
  formula: 'a + b',
  example: '30 + 15 = 45',
  ...over,
})

describe('resolveTooltip', () => {
  it('picks German columns for de', () => {
    const r = resolveTooltip(row(), 'de')
    expect(r.label).toBe('Beobachtete CT [s]')
    expect(r.content).toBe('Gemessene Zykluszeit.')
    expect(r.formula).toBe('a + b')
  })

  it('picks English columns for en', () => {
    const r = resolveTooltip(row(), 'en')
    expect(r.label).toBe('Observed CT [s]')
    expect(r.content).toBe('Measured cycle time.')
  })

  it('falls back to German for unseeded locales (es/zh)', () => {
    expect(resolveTooltip(row(), 'es').content).toBe('Gemessene Zykluszeit.')
    expect(resolveTooltip(row(), 'zh').label).toBe('Beobachtete CT [s]')
  })

  it('falls back to German when the English column is null', () => {
    const r = resolveTooltip(row({ content_en: null, label_en: null }), 'en')
    expect(r.content).toBe('Gemessene Zykluszeit.')
    expect(r.label).toBe('Beobachtete CT [s]')
  })

  it('falls back to the key when no label exists', () => {
    const r = resolveTooltip(row({ label_de: null, label_en: null }), 'de')
    expect(r.label).toBe('workshop.observed_ct')
  })

  it('keeps formula/example null when absent', () => {
    const r = resolveTooltip(row({ formula: null, example: null }), 'de')
    expect(r.formula).toBeNull()
    expect(r.example).toBeNull()
  })
})

describe('buildTooltipMap', () => {
  it('keys rows by tooltip_key', () => {
    const map = buildTooltipMap(
      [row(), row({ tooltip_key: 'workshop.machine_time', label_de: 'Maschinenzeit' })],
      'de',
    )
    expect(Object.keys(map)).toEqual(['workshop.observed_ct', 'workshop.machine_time'])
    expect(map['workshop.machine_time'].label).toBe('Maschinenzeit')
  })

  it('returns an empty map for no rows', () => {
    expect(buildTooltipMap([], 'de')).toEqual({})
  })
})
