import { describe, it, expect } from 'vitest'
import { computeMeasuresMatrix, type MeasureDatum } from '@/lib/lsc-workshop/measures-matrix'

describe('computeMeasuresMatrix', () => {
  it('returns empty array when no data', () => {
    expect(computeMeasuresMatrix([])).toEqual([])
  })

  it('uses matrix_x/y when both present (precedence over effort/benefit)', () => {
    const data: MeasureDatum[] = [
      { id: 'a', title: 'Test', matrix_x: 0.3, matrix_y: 0.7, effort_level: 5, benefit_level: 1 },
    ]
    const result = computeMeasuresMatrix(data)
    expect(result[0].x).toBe(0.3)
    expect(result[0].y).toBe(0.7)
  })

  it('falls back to effort_level/benefit_level normalized to 0-1', () => {
    const data: MeasureDatum[] = [
      { id: 'a', title: 'Test', matrix_x: null, matrix_y: null, effort_level: 5, benefit_level: 4 },
    ]
    const result = computeMeasuresMatrix(data)
    expect(result[0].x).toBe(1.0)
    expect(result[0].y).toBe(0.8)
  })

  it('drops items where neither matrix nor levels are usable', () => {
    const data: MeasureDatum[] = [
      { id: 'a', title: 'Has', matrix_x: 0.5, matrix_y: 0.5, effort_level: null, benefit_level: null },
      { id: 'b', title: 'Empty', matrix_x: null, matrix_y: null, effort_level: null, benefit_level: null },
    ]
    const result = computeMeasuresMatrix(data)
    expect(result.map((r) => r.id)).toEqual(['a'])
  })

  it('flags quick-wins (high benefit, low effort)', () => {
    const data: MeasureDatum[] = [
      { id: 'qw', title: 'QW', matrix_x: 0.2, matrix_y: 0.8, effort_level: null, benefit_level: null },
      { id: 'slog', title: 'Slog', matrix_x: 0.8, matrix_y: 0.2, effort_level: null, benefit_level: null },
    ]
    const result = computeMeasuresMatrix(data)
    expect(result.find((r) => r.id === 'qw')?.quadrant).toBe('quick-win')
    expect(result.find((r) => r.id === 'slog')?.quadrant).toBe('time-sink')
  })

  it('classifies all four quadrants by 0.5 midpoint', () => {
    const data: MeasureDatum[] = [
      { id: 'qw', title: 'QW', matrix_x: 0.2, matrix_y: 0.8, effort_level: null, benefit_level: null },
      { id: 'bp', title: 'BP', matrix_x: 0.8, matrix_y: 0.8, effort_level: null, benefit_level: null },
      { id: 'fl', title: 'FL', matrix_x: 0.2, matrix_y: 0.2, effort_level: null, benefit_level: null },
      { id: 'ts', title: 'TS', matrix_x: 0.8, matrix_y: 0.2, effort_level: null, benefit_level: null },
    ]
    const result = computeMeasuresMatrix(data)
    expect(result.find((r) => r.id === 'qw')?.quadrant).toBe('quick-win')
    expect(result.find((r) => r.id === 'bp')?.quadrant).toBe('big-project')
    expect(result.find((r) => r.id === 'fl')?.quadrant).toBe('fill-in')
    expect(result.find((r) => r.id === 'ts')?.quadrant).toBe('time-sink')
  })
})
