/** EXHIBITION: Ausstellungs-/Show-Ergebnisse je Tier — Tab in der Rennmausakte. */
import { de, expect, skipUnlessMock, test } from './fixtures'

const t = de.pages.tierTabs.exhibitions
const ta = de.pages.tierTabs.actions
const tabs = de.pages.gerbils.detail.tabs

test('Rennmausakte: Ausstellungsergebnis anlegen, sehen und löschen', async ({ page, mockDb }) => {
  skipUnlessMock()
  await page.goto('/rennmaeuse/kruemel')

  // Auf den "Ausstellungen"-Tab wechseln.
  await page.getByRole('tab', { name: tabs.exhibitions }).click()

  // Leerzustand sichtbar.
  await expect(page.getByText(t.empty)).toBeVisible()

  // Neues Ergebnis erfassen.
  await page.getByRole('button', { name: new RegExp(t.newButton) }).click()
  await page.getByLabel(new RegExp(t.fields.eventName)).fill('Nationale Rennmausschau 2026')
  await page.getByLabel(t.fields.placement).fill('1. Platz')
  await page.getByLabel(t.fields.award).fill('Best in Show')
  await page.getByRole('button', { name: ta.save, exact: true }).click()

  // Ergebnis erscheint in der Liste.
  await expect(page.getByText('Nationale Rennmausschau 2026')).toBeVisible()
  await expect(page.getByText('1. Platz')).toBeVisible()

  // Wurde im Mock mit Tier-Bezug gespeichert.
  expect(mockDb).not.toBeNull()
  const row = mockDb!.exhibitions.find((r) => r.eventName === 'Nationale Rennmausschau 2026')
  expect(row).toMatchObject({ gerbilId: 'kruemel', placement: '1. Platz', award: 'Best in Show' })

  // Löschen (window.confirm automatisch annehmen).
  page.once('dialog', (d) => void d.accept())
  await page.getByRole('button', { name: ta.delete }).click()
  await expect(page.getByText(t.empty)).toBeVisible()
})

test('Rennmausakte: leere Veranstaltung wird abgelehnt (Validierung)', async ({ page }) => {
  skipUnlessMock()
  await page.goto('/rennmaeuse/kruemel')
  await page.getByRole('tab', { name: tabs.exhibitions }).click()
  await page.getByRole('button', { name: new RegExp(t.newButton) }).click()

  // Ohne Veranstaltung speichern → Validierungsfehler, kein Eintrag.
  await page.getByRole('button', { name: ta.save, exact: true }).click()
  await expect(page.getByText(t.validation.eventNameRequired)).toBeVisible()
})
