import { test as setup } from '@playwright/test';

const authFile = 'playwright/.auth/user.json';

setup('create user', async ({ page }) => {
    await page.goto('/login', { waitUntil: 'networkidle' });
    await page.locator('input[name="username"]').fill('Test');
    await page.locator('input[name="password"]').fill('password');
    const loginPromise = page.waitForResponse('**/api/v1/auth/login')
    await page.getByRole('button', { name: 'Login' }).click();
    const response = await loginPromise;

    let responseJson;
    try {
        responseJson = await response.json();

    } catch (e) {
        if (e instanceof Error && e.message.includes("No resource with given identifier found")) {
            console.error("Already logged in!")
        } else {
            throw e
        }
    }

    if (responseJson?.message === "Failed to authenticate.") {
        await page.goto('/register', { waitUntil: 'networkidle' });
        await page.locator('input[name="username"]').fill('Test');
        await page.locator('input[name="email"]').fill('test@test.de');
        await page.locator('input[name="password"]').fill('password');
        await page.locator('#submit').click();
    }



    // Wait until the page receives the cookies.
    //
    // Sometimes login flow sets cookies in the process of several redirects.
    // Wait for the final URL to ensure that the cookies are actually set.
    await page.waitForURL('/');

    // End of authentication steps.

    await page.context().storageState({ path: authFile });
});