/**
 * Authentication Setup for Playwright Tests
 *
 * This file sets up authenticated browser states that can be reused across tests.
 * Instead of logging in via UI for every test (5-7s overhead), we login once per
 * worker and save the storage state (cookies, localStorage) to disk.
 *
 * Performance Impact:
 * - Before: 133 tests × 5-7s login = ~700s overhead
 * - After: 2 logins (once per role) × 5s = ~10s overhead
 * - Savings: ~690s (~11 minutes) per test run
 */

import { test as setup } from '@playwright/test';
import path from 'path';
import { setupAuthenticatedMocks, setupSuperuserMocks, loginViaUI } from './helpers/auth';

// Use absolute paths to ensure correct file location
const ADMIN_STORAGE_STATE = path.join(__dirname, '.auth', 'admin.json');
const USER_STORAGE_STATE = path.join(__dirname, '.auth', 'user.json');

/**
 * Setup: Authenticate as admin/superuser
 * This runs ONCE before all admin tests
 */
setup('authenticate as admin', async ({ page }) => {
  // Set up API mocks for superuser
  await setupSuperuserMocks(page);

  // Login via UI (one time only)
  await loginViaUI(page);

  // Wait a moment for auth to settle
  await page.waitForTimeout(500);

  // Save authenticated state to file
  await page.context().storageState({ path: ADMIN_STORAGE_STATE });

  console.log('✅ Admin authentication state saved to:', ADMIN_STORAGE_STATE);
});

/**
 * Setup: Authenticate as regular user
 * This runs ONCE before all user tests
 */
setup('authenticate as regular user', async ({ page }) => {
  // Set up API mocks for regular user
  await setupAuthenticatedMocks(page);

  // Login via UI (one time only)
  await loginViaUI(page);

  // Wait a moment for auth to settle
  await page.waitForTimeout(500);

  // Save authenticated state to file
  await page.context().storageState({ path: USER_STORAGE_STATE });

  console.log('✅ Regular user authentication state saved to:', USER_STORAGE_STATE);
});
