import fs from 'node:fs';
import { test } from '@playwright/test';
import { loginWithCredentials } from '../../../../src/qa/auth';
import { root, recovery, fresh, go, storeEnv, screen, record, persist, selected, type Check } from './permission-support';

test('[VE] 동일 브라우저 계정 전환 후 권한 초기화', async ({ browser }, info) => {
  test.setTimeout(180000);
  const rows: Check[] = JSON.parse(fs.readFileSync(`${root}/matrix/VE.json`, 'utf8'));
  const page = await fresh(browser, 'VE');
  try {
    await go(page, '/');
    await page.getByRole('button', { name: '사이드바 열기' }).click();
    await page.getByRole('button', { name: '로그아웃', exact: true }).click();
    await page.getByRole('button', { name: '로그아웃', exact: true }).last().click();
    await page.waitForURL('**/sign-in');
    await loginWithCredentials(page, storeEnv('CO'));
    await go(page, '/');
    const screenshot = await screen(page, info, 'VE-session-switch-to-CO');
    const response = await page.context().request.get('https://api-dev.biscuitpay.com/api/v1/store/users/auth');
    const payload = (await response.json()).payload;
    const expected = JSON.parse(fs.readFileSync(`${recovery}/CO-user-detail.json`, 'utf8')).payload;
    const baseline = selected(JSON.parse(fs.readFileSync(`${recovery}/CO-baseline.json`, 'utf8')));
    for (let i = rows.length - 1; i >= 0; i--) if (rows[i].id === 'C04' && rows[i].status === 'BLOCKED') rows.splice(i, 1);
    record(rows, 'VE', 'live session switch', 'C04', payload.userId === expected.id &&
      (await page.getByText('금일매출', { exact: true }).count() > 0) === baseline.includes('STORE_READ_TRANSACTION'),
      '동일 브라우저에서 VE 로그아웃 후 CO 실제 로그인. 인증 사용자와 변경된 역할의 홈 권한 일치', [screenshot]);
    persist('VE', rows);
  } finally { await page.context().close(); }
});
