import { fireEvent, render, screen } from '@testing-library/react'
import { describe, expect, it, vi } from 'vitest'
import { MapNode, type MapNodeModel } from './MapNode'

const NODE: MapNodeModel = {
  id: 'host:laptop',
  title: 'laptop · e14',
  subtitle: 'ThinkPad · 16 cores',
  pulse: 'busy',
  chips: [{ label: 'runner: busy', hot: true }, { label: 'claude ×6' }],
  x: 8,
  y: 30,
  inspectorKvs: [{ label: 'Agents', value: '8 (1 orphan)' }],
  actions: [{ label: 'Reap orphan', primary: true }],
}

describe('MapNode', () => {
  it('renders title, chips, and pulse state', () => {
    render(<MapNode node={NODE} />)
    expect(screen.getByText('laptop · e14')).toBeInTheDocument()
    expect(screen.getByText('ThinkPad · 16 cores')).toBeInTheDocument()
    expect(screen.getByText('runner: busy')).toBeInTheDocument()
    expect(screen.getByText('claude ×6')).toBeInTheDocument()
  })

  it('calls onSelect with the node id when clicked', () => {
    const onSelect = vi.fn()
    render(<MapNode node={NODE} onSelect={onSelect} />)
    fireEvent.click(screen.getByRole('button'))
    expect(onSelect).toHaveBeenCalledWith('host:laptop')
  })
})
