/** WEB-0b: CMS-Verwaltung der öffentlichen Webseite — Smoke-Test. */
import { de, expect, gotoSection, skipUnlessMock, test } from './fixtures'

const t = de.pages.webseite

test('Webseiten-Übersicht zeigt die Seiten mit Status', async ({ page }) => {
  skipUnlessMock()
  await gotoSection(page, de.nav.website)
  await expect(page.getByRole('heading', { name: t.title, exact: true })).toBeVisible()

  const cards = page.locator('.webseite-card')
  await expect(cards).toHaveCount(6)

  const start = page.locator('.webseite-card', { hasText: 'Startseite' })
  await expect(start.getByText(t.statusPublished, { exact: true })).toBeVisible()
})

test('Block hinzufügen, bearbeiten und verschieben bleibt erhalten', async ({ page }) => {
  skipUnlessMock()
  await gotoSection(page, de.nav.website)

  // Startseite öffnen (hat bereits zwei Blöcke).
  await page
    .locator('.webseite-card', { hasText: 'Startseite' })
    .getByRole('link', { name: t.edit })
    .click()
  await expect(page.getByRole('heading', { name: 'Startseite' })).toBeVisible()

  const blocks = page.locator('.block-card')
  await expect(blocks).toHaveCount(2)

  // Eine Überschrift hinzufügen -> jetzt drei Blöcke.
  await page.getByRole('button', { name: `+ ${t.blocks.types.Heading}` }).click()
  await expect(blocks).toHaveCount(3)

  // Den neuen (letzten) Block beschriften und speichern.
  const last = blocks.last()
  await last.getByLabel(t.blocks.fields.headingText).fill('Neue Überschrift')
  await last.getByRole('button', { name: t.blocks.save }).click()
  await expect(last.getByText(t.blocks.saved, { exact: true })).toBeVisible()

  // Den neuen Block nach oben verschieben (von Position 3 auf 2).
  await last.getByRole('button', { name: t.blocks.moveUp }).click()

  // Neu laden über die Übersicht — der Mock ist zustandsbehaftet.
  await page.getByRole('link', { name: t.back }).click()
  await page
    .locator('.webseite-card', { hasText: 'Startseite' })
    .getByRole('link', { name: t.edit })
    .click()

  // Drei Blöcke, und die neue Überschrift steht jetzt an zweiter Stelle.
  await expect(page.locator('.block-card')).toHaveCount(3)
  await expect(page.locator('.block-card').nth(1).getByLabel(t.blocks.fields.headingText)).toHaveValue(
    'Neue Überschrift',
  )
})
