import { test, expect } from '@playwright/test';

test.beforeEach(async ({ page, request }) => {
    // Naseedujeme 5 uživatelů pro dnešní den – GenerateQrModal pracuje se stávajícími choices
    await request.post('/api/dev/generate', { data: { dayIndex: 4, count: 5 } });

    // Přednastavíme bankovní účet v localStorage (SettingsContext čte z LS při inicializaci)
    await page.goto('/');
    await page.evaluate(() => {
        localStorage.setItem('bank_account_number', '2400000000/2010');
        localStorage.setItem('bank_account_holder_name', 'Test User');
    });
    // Reload tak, aby SettingsContext načetl nové hodnoty z localStorage
    await page.reload();
    await page.waitForLoadState('networkidle');
});

test('Nastavení ukládají číslo účtu a jméno do localStorage', async ({ page }) => {
    // Otevření nastavení
    await page.locator('#basic-nav-dropdown').click();
    await page.locator('text=Nastavení').click();

    // Modal musí být viditelný
    await expect(page.locator('.modal-title')).toContainText('Nastavení', { timeout: 5_000 });

    // Změníme číslo účtu – pressSequentially zajistí spuštění React onChange na každý znak
    // Číslo 1000000005 je platné (kontrolní součet mod 11 = 0), jinak by validace zamítla uložení
    const accountInput = page.getByPlaceholder('123456-1234567890/1234');
    await accountInput.click({ clickCount: 3 });
    await accountInput.pressSequentially('1000000005/5500');

    // Změníme jméno
    const nameInput = page.getByPlaceholder('Jan Novák');
    await nameInput.click({ clickCount: 3 });
    await nameInput.pressSequentially('Nové Jméno');

    // Uložíme a počkáme na zavření modalu
    await page.locator('.modal-footer button', { hasText: 'Uložit' }).click();
    await expect(page.locator('.modal')).not.toBeVisible({ timeout: 5_000 });

    // Ověříme v localStorage
    const bankAccount = await page.evaluate(() => localStorage.getItem('bank_account_number'));
    const holderName = await page.evaluate(() => localStorage.getItem('bank_account_holder_name'));
    expect(bankAccount).toBe('1000000005/5500');
    expect(holderName).toBe('Nové Jméno');
});

test('otevře modal Generování QR kódů pokud je nastaven účet', async ({ page }) => {
    // Otevření dropdown menu
    await page.locator('#basic-nav-dropdown').click();
    await page.locator('text=Generování QR kódů').click();

    // Modal se otevře
    await expect(page.locator('.modal')).toBeVisible({ timeout: 5_000 });
    // Modal musí obsahovat seznam uživatelů nebo prázdný stav
    await expect(page.locator('.modal-body')).toBeVisible();
});

test('upozorní pokud není nastaven bankovní účet', async ({ page }) => {
    // Odebereme nastavení účtu
    await page.evaluate(() => {
        localStorage.removeItem('bank_account_number');
        localStorage.removeItem('bank_account_holder_name');
    });
    await page.reload();
    await page.waitForLoadState('networkidle');

    // Dialog místo modalu
    page.on('dialog', async dialog => {
        expect(dialog.message()).toContain('číslo účtu');
        await dialog.accept();
    });

    await page.locator('#basic-nav-dropdown').click();
    await page.locator('text=Generování QR kódů').click();

    // Modal se NESMÍ otevřít
    await expect(page.locator('.modal')).not.toBeVisible({ timeout: 3_000 });
});
