import { test, expect } from '@playwright/test'

test.describe('Events list page', () => {
  test('events list loads', async ({ page }) => {
    await page.goto('/events')
    await expect(page.locator('h1', { hasText: 'Events' })).toBeVisible()
  })

  test('filter bar has type filters', async ({ page }) => {
    await page.goto('/events')
    const filterBar = page.locator('.filter-bar')
    await expect(filterBar).toBeVisible()

    for (const label of ['All', 'Workshops', 'Community', 'Social', 'Showcase']) {
      await expect(filterBar.locator('button', { hasText: label })).toBeVisible()
    }
  })

  test('past events toggle exists and can be checked', async ({ page }) => {
    await page.goto('/events')
    await page.waitForLoadState('networkidle')
    const toggle = page.locator('.past-toggle')
    await expect(toggle).toBeVisible()
    await expect(toggle).toContainText('Show past events')

    await toggle.click()
    await expect(toggle).toHaveClass(/active/)

    // Page should still render without errors after toggling
    await expect(page.locator('h1', { hasText: 'Events' })).toBeVisible()
  })

  test('clicking a filter button activates it', async ({ page }) => {
    await page.goto('/events')
    await page.waitForLoadState('networkidle')
    // Wait for Vue hydration — the "All" filter should have the active class once reactive
    const allBtn = page.locator('.filter-btn', { hasText: 'All' })
    await expect(allBtn).toHaveClass(/active/, { timeout: 10000 })
    const workshopsBtn = page.locator('.filter-bar button', { hasText: 'Workshops' })
    await workshopsBtn.click()
    await expect(workshopsBtn).toHaveClass(/active/, { timeout: 5000 })
  })

  test('event links navigate to detail page', async ({ page }) => {
    await page.goto('/events')

    // Check the past events toggle so we see all events
    await page.locator('.past-toggle').click()

    const eventLinks = page.locator('.event-row a')
    const count = await eventLinks.count()

    if (count === 0) {
      // No events in the database — just verify the empty state renders
      await expect(page.locator('.empty', { hasText: 'No events found' })).toBeVisible()
      return
    }

    // Click the first event link and verify navigation
    const firstLink = eventLinks.first()
    const href = await firstLink.getAttribute('href')
    await firstLink.click()
    await page.waitForURL(/\/events\//)

    expect(page.url()).toContain('/events/')
    // Detail page should have an h1 with the event title
    await expect(page.locator('h1')).toBeVisible()
  })
})
