const { chromium } = require('playwright');
const fs = require('fs');
const path = require('path');

async function runTests() {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  
  const results = [];
  const screenshotDir = path.join(__dirname, 'test_screenshots');
  
  if (!fs.existsSync(screenshotDir)) {
    fs.mkdirSync(screenshotDir, { recursive: true });
  }
  
  try {
    console.log('MES 기준정보 메뉴 테스트 시작\n');
    
    // 1. 페이지 로드
    console.log('1단계: 페이지 로드');
    await page.goto('http://localhost:3000', { waitUntil: 'networkidle' });
    await page.waitForTimeout(1000);
    await page.screenshot({ path: path.join(screenshotDir, '01_initial_page.png') });
    results.push('페이지 로드 완료');
    console.log('완료\n');
    
    // 2. 기준정보 메뉴 클릭
    console.log('2단계: 기준정보 메뉴 펼치기');
    const basicInfoMenu = page.locator('button:has-text("기준정보")').first();
    await basicInfoMenu.click();
    await page.waitForTimeout(500);
    await page.screenshot({ path: path.join(screenshotDir, '02_menu_expanded.png') });
    results.push('기준정보 메뉴 펼침 완료');
    console.log('완료\n');
    
    // 3. 5개 메뉴 확인
    console.log('3단계: 서브메뉴 존재 확인');
    const expectedMenus = [
      '품목기준관리',
      '공정기준관리',
      '검사기준관리',
      '거래처기준관리',
      '현장기준관리'
    ];
    
    let allMenusExist = true;
    for (const menuName of expectedMenus) {
      const menu = page.locator('button:has-text("' + menuName + '")');
      const count = await menu.count();
      
      if (count > 0) {
        results.push(menuName + ' 메뉴 존재');
        console.log('  ' + menuName);
      } else {
        results.push(menuName + ' 메뉴 미존재');
        console.log('  ' + menuName + ' (없음)');
        allMenusExist = false;
      }
    }
    console.log('완료\n');
    
    // 4. 각 메뉴 클릭 및 탭 확인
    console.log('4단계: 각 메뉴의 탭 확인');
    
    for (const menuName of expectedMenus) {
      try {
        const menu = page.locator('button:has-text("' + menuName + '")');
        const count = await menu.count();
        
        if (count > 0) {
          console.log('\n  ' + menuName + ' 클릭...');
          await menu.first().click();
          await page.waitForTimeout(1000);
          
          let tabs = await page.locator('.ant-tabs-tab').all();
          if (tabs.length === 0) {
            tabs = await page.locator('[role="tab"]').all();
          }
          
          const tabCount = tabs.length;
          console.log('  탭 개수: ' + tabCount);
          
          if (tabCount === 6) {
            results.push(menuName + ' - 6개 탭 확인');
            console.log('  OK');
          } else {
            results.push(menuName + ' - ' + tabCount + '개 탭 (예상: 6)');
            console.log('  ' + tabCount + '개');
          }
          
          const sanitizedName = menuName.replace(/[^가-힣a-zA-Z0-9]/g, '_');
          await page.screenshot({ 
            path: path.join(screenshotDir, '03_' + sanitizedName + '.png') 
          });
          
        }
      } catch (e) {
        results.push(menuName + ' 테스트 실패');
        console.log('  오류: ' + e.message);
      }
    }
    
    await page.screenshot({ path: path.join(screenshotDir, '04_final_state.png') });
    
  } catch (error) {
    console.error('오류: ' + error.message);
    results.push('테스트 오류: ' + error.message);
  } finally {
    const resultFile = path.join(__dirname, 'test_results.txt');
    const resultContent = 'MES 기준정보 메뉴 테스트 결과\n' +
      '실행 시간: ' + new Date().toLocaleString('ko-KR') + '\n\n' +
      '결과:\n' +
      results.map((r, i) => (i + 1) + '. ' + r).join('\n') + '\n\n' +
      '스크린샷 위치: ' + screenshotDir;
    
    fs.writeFileSync(resultFile, resultContent, 'utf-8');
    
    console.log('\n결과:');
    results.forEach((r, i) => console.log((i + 1) + '. ' + r));
    console.log('\n스크린샷 위치: ' + screenshotDir);
    
    await browser.close();
  }
}

runTests().catch(console.error);
