const LEVEL_MAX = 5
const MIDPOINT = 0.5

export type Quadrant = 'quick-win' | 'big-project' | 'fill-in' | 'time-sink'

export interface MeasureDatum {
  id: string
  title: string
  matrix_x: number | null
  matrix_y: number | null
  effort_level: number | null
  benefit_level: number | null
}

export interface MeasurePoint {
  id: string
  title: string
  x: number
  y: number
  quadrant: Quadrant
}

function classify(x: number, y: number): Quadrant {
  if (x <= MIDPOINT && y >= MIDPOINT) return 'quick-win'
  if (x > MIDPOINT && y >= MIDPOINT) return 'big-project'
  if (x <= MIDPOINT && y < MIDPOINT) return 'fill-in'
  return 'time-sink'
}

export function computeMeasuresMatrix(data: MeasureDatum[]): MeasurePoint[] {
  const result: MeasurePoint[] = []
  for (const d of data) {
    let x: number | null = null
    let y: number | null = null
    if (d.matrix_x != null && d.matrix_y != null) {
      x = d.matrix_x
      y = d.matrix_y
    } else if (d.effort_level != null && d.benefit_level != null) {
      x = d.effort_level / LEVEL_MAX
      y = d.benefit_level / LEVEL_MAX
    }
    if (x == null || y == null) continue
    result.push({
      id: d.id,
      title: d.title,
      x: Number(x.toFixed(4)),
      y: Number(y.toFixed(4)),
      quadrant: classify(x, y),
    })
  }
  return result
}
