import {chromium} from '@playwright/test';
import {getRuntimeQaEnv} from '../../../../src/qa/env';
import {loginWithCredentials} from '../../../../src/qa/auth';
import fs from 'node:fs';
import path from 'node:path';
export async function createStorageStateForRole(options:{application:'admin';environment:'dev';role:string;businessRole?:string}):Promise<string>{
 const env=getRuntimeQaEnv(options.environment,options.application,options.role);const browser=await chromium.launch({channel:'chrome'});const ctx=await browser.newContext({storageState:env.storageState,serviceWorkers:'block'});const page=await ctx.newPage();let signedIn=false;
 page.on('response',r=>{if(r.request().method()==='POST'&&new URL(r.url()).pathname.endsWith('/auth/sign-in')&&r.status()===200)signedIn=true;});
 const authenticated=page.waitForResponse(r=>signedIn&&new URL(r.url()).pathname.endsWith('/auth/me')&&r.status()===200,{timeout:45000});
 let loginFailure:unknown;const login=loginWithCredentials(page,env).catch(error=>{loginFailure=error;});
 try{const response=await authenticated;const user=(await response.json()).payload;if(user?.role!== (options.businessRole??(options.role==='QA4373_ADMIN'?'ADMIN':options.role)))throw new Error('BLOCKED: 인증된 실제 역할이 요청 역할과 다름');await page.goto(`${env.baseUrl}/business/vendor-manage?tenantId=redacted}`,{waitUntil:'domcontentloaded'});await page.locator('[data-route-keep-alive-active=true]').waitFor({state:'visible',timeout:30000});await login;if(loginFailure)throw loginFailure;const statePath=env.storageState??path.join('.auth','admin','dev',options.role+'.json');fs.mkdirSync(path.dirname(statePath),{recursive:true});await ctx.storageState({path:statePath});return statePath;}finally{await ctx.close();await login;await browser.close()}
}
