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('='.repeat(70));
    console.log('MES 시스템 - 기준정보 메뉴 탭 구조 테스트');
    console.log('='.repeat(70) + '\n');
    
    // 1. 페이지 로드
    console.log('[1단계] 페이지 로드 및 초기 상태');
    console.log('-'.repeat(70));
    await page.goto('http://localhost:3000', { waitUntil: 'networkidle' });
    await page.waitForTimeout(1500);
    await page.screenshot({ path: path.join(screenshotDir, '01_initial_page.png') });
    console.log('OK - 페이지 로드 완료\n');
    results.push('페이지 로드 완료');
    
    // 2. 5개 메뉴 확인
    console.log('[2단계] 5개 서브메뉴 존재 확인');
    console.log('-'.repeat(70));
    
    const expectedMenus = [
      '품목기준관리',
      '공정기준관리',
      '검사기준관리',
      '거래처기준관리',
      '현장기준관리'
    ];
    
    let menuCheckResults = {};
    for (const menuName of expectedMenus) {
      const menu = page.locator('button').filter({ hasText: new RegExp('^' + menuName + '$') });
      const count = await menu.count();
      menuCheckResults[menuName] = count > 0;
      console.log((count > 0 ? 'OK' : 'NG') + ' - ' + menuName);
      results.push((count > 0 ? 'O' : 'X') + ' ' + menuName + ' 존재');
    }
    console.log();
    
    // 3. 각 메뉴 클릭 및 탭 개수 확인
    console.log('[3단계] 각 메뉴의 탭 구조 분석');
    console.log('-'.repeat(70));
    
    for (let idx = 0; idx < expectedMenus.length; idx++) {
      const menuName = expectedMenus[idx];
      
      if (!menuCheckResults[menuName]) {
        console.log('SKIP - ' + menuName + ' (메뉴 없음)\n');
        continue;
      }
      
      try {
        const menu = page.locator('button').filter({ hasText: new RegExp('^' + menuName + '$') });
        await menu.first().click();
        console.log(menuName + ' - 클릭 완료');
        
        // 페이지 로드 대기
        await page.waitForTimeout(1500);
        
        // 탭 찾기 - 여러 선택자 시도
        let tabs = await page.locator('div[class*="tabs"] button[class*="tab"]').all();
        
        if (tabs.length === 0) {
          tabs = await page.locator('button[class*="ant-tabs-tab"]').all();
        }
        
        if (tabs.length === 0) {
          tabs = await page.locator('[class*="Tab"]').filter({ visible: true }).all();
        }
        
        if (tabs.length === 0) {
          tabs = await page.locator('button').filter({ 
            hasText: /계층구조|속성|항목|품목분류|템플릿|거래처|검사|공정/ 
          }).all();
        }
        
        const tabCount = tabs.length;
        console.log('  탭 개수: ' + tabCount + '개');
        
        // 탭 텍스트 출력
        if (tabCount > 0) {
          const tabTexts = [];
          for (let i = 0; i < Math.min(tabCount, 10); i++) {
            const text = await tabs[i].textContent();
            const trimmed = text ? text.trim() : '';
            if (trimmed.length > 0 && trimmed.length < 50) {
              tabTexts.push(trimmed.substring(0, 30));
            }
          }
          
          if (tabTexts.length > 0) {
            console.log('  탭 목록:');
            tabTexts.forEach((t, i) => {
              console.log('    ' + (i+1) + '. ' + t);
            });
          }
        }
        
        // 페이지의 상단 탭 영역 확인
        const tabElements = await page.locator('[role="tab"], [class*="tab"]').all();
        console.log('  [보조] 탭 관련 요소: ' + tabElements.length + '개');
        
        if (tabCount === 6) {
          console.log('  결과: OK - 정확히 6개 탭');
          results.push(menuName + ' - 6개 탭 확인');
        } else {
          console.log('  결과: ' + tabCount + '개 탭 (예상: 6개)');
          results.push(menuName + ' - ' + tabCount + '개 탭');
        }
        
        // 스크린샷
        const sanitized = menuName.replace(/[^가-힣a-zA-Z0-9]/g, '_');
        await page.screenshot({ 
          path: path.join(screenshotDir, '03_' + sanitized + '.png') 
        });
        console.log('  스크린샷 저장\n');
        
      } catch (e) {
        console.log('  오류: ' + e.message + '\n');
        results.push(menuName + ' - 오류');
      }
    }
    
    await page.screenshot({ path: path.join(screenshotDir, '04_final_state.png') });
    
  } catch (error) {
    console.error('테스트 오류: ' + error.message);
    results.push('테스트 오류');
  } finally {
    // 결과 파일 저장
    const resultFile = path.join(__dirname, 'test_result_report.txt');
    const now = new Date();
    const timeStr = now.toLocaleString('ko-KR');
    
    const report = 
      '= MES 시스템 기준정보 메뉴 테스트 보고서 =\n' +
      '='.repeat(70) + '\n\n' +
      '테스트 환경:\n' +
      '- 시스템: http://localhost:3000\n' +
      '- 테스트 도구: Playwright\n' +
      '- 실행 시간: ' + timeStr + '\n' +
      '- 상태: 이미 로그인됨 (관리자 계정)\n\n' +
      '테스트 항목:\n' +
      '1. 페이지 로드 확인\n' +
      '2. 5개 서브메뉴 존재 확인\n' +
      '   - 품목기준관리\n' +
      '   - 공정기준관리\n' +
      '   - 검사기준관리\n' +
      '   - 거래처기준관리\n' +
      '   - 현장기준관리\n' +
      '3. 각 메뉴별 탭 개수 확인 (예상: 6개)\n\n' +
      '상세 결과:\n' +
      results.map((r, i) => (i+1) + '. ' + r).join('\n') + '\n\n' +
      '스크린샷 저장 위치:\n' +
      screenshotDir + '\n\n' +
      '스크린샷 파일:\n' +
      '- 01_initial_page.png\n' +
      '- 03_품목기준관리.png\n' +
      '- 03_공정기준관리.png\n' +
      '- 03_검사기준관리.png\n' +
      '- 03_거래처기준관리.png\n' +
      '- 03_현장기준관리.png\n' +
      '- 04_final_state.png\n' +
      '='.repeat(70) + '\n';
    
    fs.writeFileSync(resultFile, report, 'utf-8');
    
    console.log('='.repeat(70));
    console.log('테스트 완료');
    console.log('='.repeat(70) + '\n');
    
    console.log('최종 결과:');
    results.forEach((r, i) => console.log((i+1) + '. ' + r));
    
    console.log('\n저장 위치:');
    console.log('스크린샷: ' + screenshotDir);
    console.log('보고서: ' + resultFile);
    
    await browser.close();
  }
}

runTests().catch(console.error);
