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

(async () => {
  // 스크린샷 저장 디렉토리 생성
  const screenshotDir = path.join(__dirname, 'screenshots-basis');
  if (!fs.existsSync(screenshotDir)) {
    fs.mkdirSync(screenshotDir, { recursive: true });
  }

  const browser = await chromium.launch({ headless: false });
  const context = await browser.createContext();
  const page = await context.newPage();

  try {
    // 1. 페이지 로드
    console.log('1. 페이지 로드 중...');
    await page.goto('http://localhost:3000', { waitUntil: 'networkidle' });
    await page.waitForTimeout(2000);

    // 로그인 폼 확인
    const loginForm = await page.locator('input[type="text"]').first();
    if (!loginForm) {
      console.log('로그인 폼을 찾을 수 없습니다.');
      return;
    }

    // 2. admin/admin123으로 로그인
    console.log('2. 로그인 수행 중... (admin/admin123)');
    
    // 사용자명 입력
    await page.fill('input[type="text"]', 'admin');
    await page.waitForTimeout(500);

    // 비밀번호 입력
    await page.fill('input[type="password"]', 'admin123');
    await page.waitForTimeout(500);

    // 로그인 버튼 클릭
    const loginButton = await page.locator('button:has-text("로그인")').first();
    if (loginButton) {
      await loginButton.click();
    } else {
      // 다른 로그인 버튼 시도
      await page.click('button[type="submit"]');
    }

    // 로그인 완료 대기
    await page.waitForTimeout(3000);
    await page.waitForLoadState('networkidle').catch(() => {});

    console.log('로그인 완료');

    // 3. 기준정보 메뉴 클릭하여 서브메뉴 확인
    console.log('3. 기준정보 메뉴 클릭 중...');
    
    // 기준정보 메뉴 찾기 및 클릭
    const basisMenu = await page.locator('text=기준정보').first();
    if (basisMenu) {
      await basisMenu.click();
      await page.waitForTimeout(1000);
    }

    // 서브메뉴 확인
    const submenus = await page.locator('a, span, li, div', { has: page.locator('text=/품목|공정|검사|거래처|현장/') }).all();
    console.log(`발견된 관련 메뉴: ${submenus.length}개`);

    // 4. 각 기준관리 메뉴별 스크린샷 캡처
    const menus = [
      { name: '품목기준관리', selector: 'text=품목기준관리' },
      { name: '공정기준관리', selector: 'text=공정기준관리' },
      { name: '검사기준관리', selector: 'text=검사기준관리' },
      { name: '거래처기준관리', selector: 'text=거래처기준관리' },
      { name: '현장기준관리', selector: 'text=현장기준관리' }
    ];

    for (const menu of menus) {
      try {
        console.log(`\n${menu.name} 메뉴 클릭 중...`);
        
        const menuElement = await page.locator(menu.selector).first();
        if (menuElement) {
          await menuElement.click();
          await page.waitForTimeout(2000);
          
          // 스크린샷 캡처
          const screenshotPath = path.join(screenshotDir, `${menu.name}.png`);
          await page.screenshot({ path: screenshotPath, fullPage: true });
          console.log(`✓ ${menu.name} 스크린샷 저장: ${screenshotPath}`);
        } else {
          console.log(`✗ ${menu.name} 메뉴를 찾을 수 없습니다.`);
        }
      } catch (error) {
        console.log(`✗ ${menu.name} 처리 중 오류: ${error.message}`);
      }
    }

    console.log('\n작업 완료!');
    console.log(`스크린샷 저장 경로: ${screenshotDir}`);

  } catch (error) {
    console.error('에러 발생:', error);
  } finally {
    await browser.close();
  }
})();
