import { render, screen } from '@testing-library/react'
import { describe, expect, it } from 'vitest'
import { LIMIT_ACCOUNTS } from './fixtures/limits'
import { LimitMeter } from './LimitMeter'

describe('LimitMeter', () => {
  it('renders percent and cap ETA for a warn-tier account', () => {
    render(<LimitMeter account={LIMIT_ACCOUNTS[0]!} />)
    expect(screen.getByText('claude · claude A')).toBeInTheDocument()
    expect(screen.getByText('78% · ~55m left')).toBeInTheDocument()
  })

  it('renders percent only when there is no cap ETA', () => {
    render(<LimitMeter account={LIMIT_ACCOUNTS[1]!} />)
    expect(screen.getByText('23%')).toBeInTheDocument()
  })

  it('uses the warning fill above warnAt', () => {
    const { container } = render(<LimitMeter account={LIMIT_ACCOUNTS[0]!} />)
    expect(container.querySelector('i')).toHaveClass('bg-warning')
  })

  it('uses the success fill below warnAt', () => {
    const { container } = render(<LimitMeter account={LIMIT_ACCOUNTS[1]!} />)
    expect(container.querySelector('i')).toHaveClass('bg-success')
  })

  it('renders a dash when percent is null and status is ok', () => {
    render(<LimitMeter account={{ slug: 'unknown', percent: null, status: 'ok', capEtaMinutes: null }} />)
    expect(screen.getByText('—')).toBeInTheDocument()
  })

  it('renders broken status when percent is null and auth failed', () => {
    render(<LimitMeter account={{ slug: 'codex:zync', label: 'codex · zync', percent: null, status: 'broken', capEtaMinutes: null }} />)
    expect(screen.getByText('broken')).toBeInTheDocument()
  })
})
