import { render, screen } from '@testing-library/react'
import { describe, expect, it } from 'vitest'
import { planStatusCategory, statusCategoryBadgeVariant, StatusChip } from './StatusChip'

describe('StatusChip', () => {
  it('uses one category mapping for status labels and styling', () => {
    expect(planStatusCategory('running', true)).toBe('needs-you')
    expect(planStatusCategory('succeeded')).toBe('completed')
    expect(planStatusCategory('healthy')).toBe('completed')
    expect(planStatusCategory('stale')).toBe('needs-you')
    expect(planStatusCategory('error')).toBe('failed')
    expect(planStatusCategory('fail')).toBe('failed')
    expect(planStatusCategory('success')).toBe('completed')
    expect(planStatusCategory('pass')).toBe('completed')
    expect(planStatusCategory('ok')).toBe('completed')
    expect(planStatusCategory('absent')).toBe('queued')
    expect(planStatusCategory('warn')).toBe('needs-you')
    expect(planStatusCategory('notice')).toBe('queued')
    expect(planStatusCategory('info')).toBe('queued')
    expect(planStatusCategory('debug')).toBe('unknown')
  })

  it('maps categories to the badge variants that carry their colors', () => {
    expect(statusCategoryBadgeVariant('needs-you')).toBe('warning')
    expect(statusCategoryBadgeVariant('failed')).toBe('error')
    expect(statusCategoryBadgeVariant('running')).toBe('success')
    expect(statusCategoryBadgeVariant('completed')).toBe('success')
    expect(statusCategoryBadgeVariant('queued')).toBe('neutral')
    expect(statusCategoryBadgeVariant('unknown')).toBe('neutral')
  })

  it('renders the status text and category on the badge', () => {
    const { rerender } = render(<StatusChip status="succeeded" />)
    const succeeded = screen.getByTestId('status-chip')
    expect(succeeded).toHaveTextContent('succeeded')
    expect(succeeded).toHaveAttribute('data-status-category', 'completed')

    rerender(<StatusChip status="running" needsYou />)
    expect(screen.getByTestId('status-chip')).toHaveTextContent('needs you')
    expect(screen.getByTestId('status-chip')).toHaveAttribute('data-status-category', 'needs-you')

    rerender(<StatusChip status="absent" label="not recorded" />)
    expect(screen.getByTestId('status-chip')).toHaveTextContent('not recorded')
    expect(screen.getByTestId('status-chip')).toHaveAttribute('data-status-category', 'queued')
  })
})