import { describe, expect, it } from 'vitest'
import {
  fmtHoursDecimal,
  fmtHoursMinutes,
  fmtHoursMinutesSeconds,
  fmtMoneyHours,
  fmtTimestampShort,
  fmtUsd,
} from '@/lib/format'

describe('format helpers', () => {
  it('FMT-001 fmtHoursDecimal', () => {
    expect(fmtHoursDecimal(3600)).toBe('1.00')
    expect(fmtHoursDecimal(5400)).toBe('1.50')
    expect(fmtHoursDecimal(null)).toBe('—')
  })

  it('FMT-002 fmtHoursMinutes simple cases', () => {
    expect(fmtHoursMinutes(5400)).toBe('1:30')
    expect(fmtHoursMinutes(3600)).toBe('1:00')
    expect(fmtHoursMinutes(0)).toBe('0:00')
  })

  it('FMT-003 fmtHoursMinutes rounds to nearest minute', () => {
    // 5430s = 1h 30m 30s → rounds to 1:31 (90.5 → 91)
    expect(fmtHoursMinutes(5430)).toBe('1:31')
    // 5429s = 1h 30m 29s → rounds down to 1:30
    expect(fmtHoursMinutes(5429)).toBe('1:30')
  })

  it('FMT-004 fmtHoursMinutes(null) is em-dash', () => {
    expect(fmtHoursMinutes(null)).toBe('—')
    expect(fmtHoursMinutes(undefined)).toBe('—')
  })

  it('FMT-005 fmtUsd formats with thousands separator', () => {
    expect(fmtUsd(1593.89)).toBe('$1,593.89')
    expect(fmtUsd(0)).toBe('$0.00')
    expect(fmtUsd(null)).toBe('—')
  })

  it('FMT-006 fmtMoneyHours combines dollars and hh:mm', () => {
    // 5400s = 1.5h × $14 = $21.00, hh:mm 1:30
    expect(fmtMoneyHours(5400, 14)).toBe('$21.00 (1:30)')
  })

  it('FMT-007 fmtMoneyHours returns em-dash for zero/null', () => {
    expect(fmtMoneyHours(0, 14)).toBe('—')
    expect(fmtMoneyHours(null, 14)).toBe('—')
    expect(fmtMoneyHours(undefined, 14)).toBe('—')
  })

  it('FMT-009 fmtHoursMinutesSeconds shows exact seconds', () => {
    expect(fmtHoursMinutesSeconds(5400)).toBe('1:30:00')
    expect(fmtHoursMinutesSeconds(3661)).toBe('1:01:01')
    expect(fmtHoursMinutesSeconds(0)).toBe('0:00:00')
    expect(fmtHoursMinutesSeconds(null)).toBe('—')
    expect(fmtHoursMinutesSeconds(undefined)).toBe('—')
  })

  it('FMT-008 fmtTimestampShort truncates and normalizes', () => {
    expect(fmtTimestampShort('2026-05-20T09:30:00')).toBe('2026-05-20 09:30')
    expect(fmtTimestampShort('2026-05-20 09:30:00')).toBe('2026-05-20 09:30')
    expect(fmtTimestampShort(null)).toBe('—')
  })
})
