/**
 * Die Erststart-Frage nach dem abwählbaren Kapitel – im echten Fenster.
 *
 * Eigene Datei mit eigener Anwendung, weil `appStarten` die Frage für alle
 * übrigen Prüfungen beantwortet. Hier soll sie stehenbleiben.
 */

import { type ElectronApplication, type Page } from '@playwright/test';

import { appStartenOhneZuschnitt } from './electron-hilfe';
import { expect, test } from './konsolenwache';

let app: ElectronApplication;
let fenster: Page;

test.beforeEach(async () => {
  ({ app, fenster } = await appStartenOhneZuschnitt());
});

test.afterEach(async () => {
  await app.close();
});

test('steht beim allerersten Start vor dem Startbildschirm', async () => {
  /* 89 von 575 Fragen hängen daran. Der Schalter lag bisher unter „Ihr
     Lernplan“ – wer nie hinunterscrollte, sah ihn nie. */
  await expect(fenster.getByRole('heading', { name: /Lernen Sie .* mit\?/u })).toBeVisible();
  await expect(fenster.getByRole('heading', { name: 'Heute lernen' })).toHaveCount(0);
});

test('hat „mitlernen“ vorausgewählt und nennt die Zahlen', async () => {
  await expect(fenster.getByRole('radio', { name: /Ja, mitlernen/u })).toBeChecked();
  /* Die Zahlen kommen aus dem Katalog, nicht aus dem Text – sonst liefen sie
     bei der nächsten Katalogfassung auseinander. */
  await expect(fenster.getByText(/89 der 575 Fragen/u)).toBeVisible();
});

test('führt mit „Weiter“ zum Startbildschirm und lässt den Katalog vollständig', async () => {
  await fenster.getByRole('button', { name: 'Weiter', exact: true }).click();

  await expect(fenster.getByRole('heading', { name: 'Heute lernen' })).toBeVisible();
  /* Der Schalter unter „Ihr Lernplan“ steht danach auf „mitlernen“. */
  await expect(
    fenster.getByRole('checkbox', { name: /Kapitel IV – Not- und Seenotsignalmittel/u }),
  ).toBeChecked();
});

test('wählt bei „weglassen“ das Kapitel dauerhaft ab', async () => {
  await fenster.getByRole('radio', { name: /Nein, weglassen/u }).check();
  await fenster.getByRole('button', { name: 'Weiter', exact: true }).click();

  await expect(fenster.getByRole('heading', { name: 'Heute lernen' })).toBeVisible();
  await expect(
    fenster.getByRole('checkbox', { name: /Kapitel IV – Not- und Seenotsignalmittel/u }),
  ).not.toBeChecked();
  /* Und die Zahlen rechnen ohne das Kapitel: 486 statt 575. */
  await expect(fenster.getByText(/von 486 Fragen/u).first()).toBeVisible();
});

test('kommt beim zweiten Start nicht wieder', async () => {
  await fenster.getByRole('button', { name: 'Weiter', exact: true }).click();
  await expect(fenster.getByRole('heading', { name: 'Heute lernen' })).toBeVisible();

  /* Neu laden ist der schärfere Fall als ein Neustart: Dasselbe Fenster,
     derselbe Zustand auf der Platte – hinge die Antwort im Arbeitsspeicher,
     käme die Frage hier wieder. */
  await fenster.reload();
  await fenster.waitForSelector('h1', { state: 'visible' });

  await expect(fenster.getByRole('heading', { name: 'Heute lernen' })).toBeVisible();
  await expect(fenster.getByRole('heading', { name: /Lernen Sie .* mit\?/u })).toHaveCount(0);
});
