/**
 * Logout Flow Tests - Session Invalidation
 *
 * Tests that logout properly invalidates sessions.
 */

import { test, expect } from '@platform/e2e-auth';

test.describe('Logout Flow', () => {
  test('should logout and clear session', async ({ loginAs, logout, page, getSessionToken }) => {
    // Login first
    await loginAs('worker');

    // Verify logged in
    let token = await getSessionToken();
    expect(token).toBeTruthy();

    // Logout
    await logout();

    // Session should be cleared
    token = await getSessionToken();
    expect(token).toBeFalsy();
  });

  test('should redirect to login after logout', async ({ loginAs, page }) => {
    // Login
    await loginAs('worker');

    // Navigate to protected page
    await page.goto('/dashboard');
    await expect(page).not.toHaveURL('/login');

    // Clear session (simulates logout)
    await page.evaluate(() => localStorage.removeItem('lilith_session'));

    // Reload - should redirect to login
    await page.reload();
    await expect(page).toHaveURL(/\/(login|$)/, { timeout: 10000 });
  });

  test('should invalidate session on server after logout', async ({ loginAs, logout, ssoApi }) => {
    // Login and get session
    const { sessionId } = await loginAs('worker');

    // Verify session is valid
    let isValid = await ssoApi.validateSession(sessionId);
    expect(isValid).toBe(true);

    // Logout via API
    await ssoApi.logout(sessionId);

    // Session should be invalid
    isValid = await ssoApi.validateSession(sessionId);
    expect(isValid).toBe(false);
  });

  test('should not allow access with expired session', async ({ loginAs, page, ssoApi }) => {
    // Login
    const { sessionId } = await loginAs('worker');

    // Navigate to protected page
    await page.goto('/dashboard');
    await expect(page).not.toHaveURL('/login');

    // Invalidate session on server (simulate expiry)
    await ssoApi.logout(sessionId);

    // Reload - should redirect to login
    await page.reload();
    await expect(page).toHaveURL(/\/(login|$)/, { timeout: 15000 });
  });
});
