import { describe, expect, it } from 'vitest'
import { render, fireEvent, screen, waitFor } from '@testing-library/react'
import { Calendar } from './Calendar'
import { spokenPhraseUntil } from './sr-test-utils'

describe('Calendar [SR]', () => {
  it('announces date grid controls and focused day names', async () => {
    render(<Calendar mode="single" month={new Date(2026, 6, 1)} />)

    const phrase = await spokenPhraseUntil(document.body, (value) => value.toLowerCase().includes('july'))
    expect(phrase.toLowerCase()).toContain('july')
  })

  it('announces selected state for a chosen date', async () => {
    render(
      <Calendar mode="single" month={new Date(2026, 6, 1)} selected={new Date(2026, 6, 15)} />,
    )

    fireEvent.click(screen.getByRole('button', { name: /July 15/ }))
    const selected = await waitFor(() => screen.getByRole('button', { name: /July 15/ }))
    fireEvent.focus(selected)
    // Grid includes outside-month lead days before July 1, so reaching July 15's
    // cell needs far more than the default step budget.
    const phrase = await spokenPhraseUntil(
      document.body,
      (value) => {
        const lowered = value.toLowerCase()
        return lowered.includes('july') && lowered.includes('15')
      },
      300,
    )
    expect(phrase.toLowerCase()).toContain('july 15')
  })
})
