/**
 * UX-MOBILE-1: FilterPanel — einklappbare Filter auf Smartphone, inline auf Desktop.
 *
 * Telefon (390px): Filter-Button sichtbar, Drawer eingeklappt; Tippen öffnet/schliesst.
 * Desktop (1280px): Alle Controls direkt sichtbar, kein Toggle-Button.
 */
import { de, expect, gotoSection, skipUnlessMock, test } from './fixtures'

const t = de.pages.gerbils

test.describe('FilterPanel – Rennmäuse-Liste', () => {
  test('Phone: Filter-Drawer standardmäßig eingeklappt, Toggle-Button sichtbar', async ({
    page,
  }, testInfo) => {
    skipUnlessMock()
    if (testInfo.project.name !== 'phone') return

    await gotoSection(page, de.nav.gerbils)
    await expect(page.getByRole('heading', { name: t.title, exact: true })).toBeVisible()

    // Toggle-Button sichtbar.
    const toggle = page.locator('.filter-panel__toggle')
    await expect(toggle).toBeVisible()

    // Status-Beschriftung im Drawer ist noch verborgen.
    await expect(page.getByText(t.filters.status, { exact: true }).first()).not.toBeVisible()
  })

  test('Phone: Toggle öffnet und schließt den Filter-Drawer', async ({
    page,
  }, testInfo) => {
    skipUnlessMock()
    if (testInfo.project.name !== 'phone') return

    await gotoSection(page, de.nav.gerbils)
    const toggle = page.locator('.filter-panel__toggle')

    // Öffnen → Status-Feld wird sichtbar.
    await toggle.click()
    await expect(page.getByText(t.filters.status, { exact: true }).first()).toBeVisible()

    // Schließen → wieder verborgen.
    await toggle.click()
    await expect(page.getByText(t.filters.status, { exact: true }).first()).not.toBeVisible()
  })

  test('Phone: Badge zählt aktive Filter korrekt', async ({
    page,
  }, testInfo) => {
    skipUnlessMock()
    if (testInfo.project.name !== 'phone') return

    await gotoSection(page, de.nav.gerbils)
    const toggle = page.locator('.filter-panel__toggle')

    // Initial: Status='Active' ist Default → Badge zeigt kein „(N)".
    await expect(toggle).toHaveText('Filter')

    // Filter-Drawer öffnen und Geschlecht setzen → 1 aktiver Filter.
    await toggle.click()
    await page.locator('.filter-panel__drawer select').nth(1).selectOption('male')
    await expect(toggle).toHaveText('Filter (1)')

    // Zurücksetzen → Badge weg.
    await page.getByRole('button', { name: de.filterPanel.resetButton }).click()
    await expect(toggle).toHaveText('Filter')
  })

  test('Desktop: Toggle-Button nicht sichtbar, alle Controls inline', async ({
    page,
  }, testInfo) => {
    skipUnlessMock()
    if (testInfo.project.name !== 'desktop') return

    await gotoSection(page, de.nav.gerbils)
    await expect(page.getByRole('heading', { name: t.title, exact: true })).toBeVisible()

    // Kein Toggle-Button auf Desktop (display:none via Media Query).
    const toggle = page.locator('.filter-panel__toggle')
    await expect(toggle).toBeHidden()

    // Status-Beschriftung direkt sichtbar.
    await expect(page.getByText(t.filters.status, { exact: true }).first()).toBeVisible()
  })
})
