import fs from 'node:fs';import {expect,test} from '@playwright/test';import {adminEnv,root,recovery,preset,selected,keys,openPreset,save,screen,fresh,go,settled,refresh,homeSnapshot,persist,record,type Check,type Role} from './permission-support';
for(const role of ['CO','BO','VE'] as Role[])test(`[${role}] 독립 원복 확인`,async({browser},info)=>{
 test.setTimeout(240000);test.skip(process.env.QA_ALLOW_PERMISSION_MUTATION!=='1','BLOCKED: mutation guard missing');const f=`${recovery}/${role}-baseline.json`;test.skip(!fs.existsSync(f),'BLOCKED: baseline 미생성, 변경 전 중단');
 const baseline=JSON.parse(fs.readFileSync(f,'utf8'));const c=await browser.newContext({storageState:adminEnv().storageState,viewport:{width:1600,height:1000}});const a=await c.newPage();const rows:Check[]=fs.existsSync(`${root}/matrix/${role}.json`)?JSON.parse(fs.readFileSync(`${root}/matrix/${role}.json`,'utf8')):[];
 try{await openPreset(a,role);const current=selected(await preset(c,role));if(JSON.stringify(current)!==JSON.stringify(selected(baseline))){const settings:Record<string,boolean>={};for(const [label,key]of Object.entries(keys))if(await a.getByRole('checkbox',{name:label,exact:true}).count())settings[label]=selected(baseline).includes(key);await save(a,role,settings,'독립 복구');}
 expect(selected(await preset(c,role))).toEqual(selected(baseline));const adminShot=await screen(a,info,`${role}-independent-restore`);const store=await fresh(browser,role);try{await go(store,'/');await refresh(store);await settled(store);const s=await screen(store,info,`${role}-independent-restored-refresh`);const ok=(await store.getByText('금일매출',{exact:true}).count()>0)===selected(baseline).includes('STORE_READ_TRANSACTION')&&(await store.getByText('정산금',{exact:true}).count()>0)===selected(baseline).includes('STORE_READ_SETTLEMENT');record(rows,role,'final independent restore',['F01','F02','F03','F04'],ok,'전체 권한 ID 일치 및 새 로그인·브라우저 새로고침 후 시작 상태 복원',[adminShot,s]);persist(role,rows);expect(ok).toBe(true);const homeFile=`${recovery}/${role}-home-baseline.json`;if(fs.existsSync(homeFile))expect(await homeSnapshot(store),'original home amounts restored').toEqual(JSON.parse(fs.readFileSync(homeFile,'utf8')));}finally{await store.context().close();}}
 catch(error){record(rows,role,'final restore failure',['F01','F02','F03','F04'],false,`HIGH: restoration verification failed: ${String(error)}`,[]);persist(role,rows);throw error;}finally{await c.close();}
});
