import { test, expect } from './helpers/fixtures.js'

test.describe('Admin events list', () => {
  test('events list loads for admin', async ({ adminPage }) => {
    await adminPage.goto('/admin/events')

    await expect(adminPage.locator('h1')).toContainText('Events')
  })

  test('create event button present', async ({ adminPage }) => {
    await adminPage.goto('/admin/events')

    await expect(
      adminPage.getByRole('link', { name: 'Create Event' })
    ).toBeVisible()
  })
})

test.describe('Admin events create', () => {
  test('create event page loads', async ({ adminPage }) => {
    await adminPage.goto('/admin/events/create')

    await expect(adminPage.locator('h1')).toContainText('Create Event')
  })

  test('create event form has required fields', async ({ adminPage }) => {
    await adminPage.goto('/admin/events/create')

    // Title input
    await expect(
      adminPage.getByPlaceholder('Enter a clear, descriptive event title')
    ).toBeVisible()

    // Description textarea
    await expect(
      adminPage.getByPlaceholder(
        'Provide a clear description of what attendees can expect from this event'
      )
    ).toBeVisible()

    // Event type select (USelect renders a button with the selected value)
    await expect(adminPage.getByText('Event Type')).toBeVisible()
  })
})

test.describe('Admin events access control', () => {
  test('non-admin redirect', async ({ page }) => {
    await page.goto('/admin/events')

    // Admin middleware redirects unauthenticated users to /
    await page.waitForURL((url) => !url.pathname.startsWith('/admin'))

    expect(page.url()).not.toContain('/admin/events')
  })
})
