import { test, expect } from '@playwright/test';
import { BASE_URL, USER, loginAs } from '../helpers';

test.describe('Logout', () => {

    test('logout redirects to login page', async ({ page }) => {
        await loginAs(page, USER.mobile, USER.password);

        await page.click('[data-testid="navbar-user-menu"]');
        await page.click('[data-testid="nav-link-logout"]');

        await expect(page).toHaveURL(`${BASE_URL}/login`);
    });

    test('logout clears CSRF cookies', async ({ page, context }) => {
        await loginAs(page, USER.mobile, USER.password);

        await page.click('[data-testid="navbar-user-menu"]');
        await page.click('[data-testid="nav-link-logout"]');
        await page.waitForURL(`${BASE_URL}/login`);

        // After logout, no CSRF cookies should remain
        const afterCookies = await context.cookies();
        const csrfAfter = afterCookies.filter(c =>
            /^(__Host-)?(authenticate|submit|logout)_/.test(c.name)
        );
        expect(csrfAfter).toHaveLength(0);
    });

    test('can log in again after logout without CSRF error', async ({ page }) => {
        await loginAs(page, USER.mobile, USER.password);

        await page.click('[data-testid="navbar-user-menu"]');
        await page.click('[data-testid="nav-link-logout"]');
        await page.waitForURL(`${BASE_URL}/login`);

        await expect(page.locator('[data-testid="login-error"]')).not.toBeVisible();

        await loginAs(page, USER.mobile, USER.password);
        await expect(page).toHaveURL(`${BASE_URL}/`);
    });

});
