import { test, expect } from '@playwright/test';

test('실제 로그인 테스트 - 대시보드까지 확인', async ({ page }) => {
  console.log('\n\n╔════════════════════════════════════════════╗');
  console.log('║        실제 로그인 완료 테스트            ║');
  console.log('╚════════════════════════════════════════════╝\n');

  // 1단계: 로그인 페이지 접속
  console.log('1️⃣ 로그인 페이지 접속...');
  const loginResponse = await page.goto('http://localhost:5265/login.html', { waitUntil: 'load' });
  console.log(`   상태: ${loginResponse?.status()} ${loginResponse?.status() === 200 ? '✅' : '❌'}`);
  console.log(`   URL: ${page.url()}`);

  // 2단계: 로그인 폼 확인
  console.log('\n2️⃣ 로그인 폼 확인...');
  const form = await page.locator('#loginForm');
  const formVisible = await form.isVisible();
  console.log(`   폼 존재: ${formVisible ? '✅' : '❌'}`);

  // 3단계: 자격증명 입력
  console.log('\n3️⃣ 자격증명 입력...');
  await page.fill('#username', 'admin');
  console.log('   아이디 입력: ✅');
  await page.fill('#password', 'admin');
  console.log('   비밀번호 입력: ✅');

  // 4단계: 로그인 버튼 클릭
  console.log('\n4️⃣ 로그인 버튼 클릭...');
  const button = await page.locator('#loginBtn');
  await button.click();
  console.log('   클릭 완료: ✅');

  // 5단계: API 응답 대기
  console.log('\n5️⃣ API 응답 대기 중...');
  
  // 네트워크 요청 모니터링
  let apiSuccess = false;
  let apiResponse = null;
  
  page.on('response', response => {
    if (response.url().includes('/api/auth/login')) {
      apiResponse = response;
      console.log(`   API 응답: ${response.status()}`);
      if (response.status() === 200) {
        apiSuccess = true;
        console.log('   로그인 API: ✅ 200 OK');
      }
    }
  });

  // URL 변경 대기 (리다이렉트)
  console.log('\n6️⃣ 페이지 리다이렉트 대기...');
  try {
    await page.waitForURL('/', { timeout: 5000 });
    console.log(`   최종 URL: ${page.url()}`);
    console.log('   리다이렉트: ✅');
  } catch (e) {
    console.log(`   최종 URL: ${page.url()}`);
    console.log(`   리다이렉트 대기 시간 초과 (5초) - URL 확인 중...`);
  }

  // 7단계: 대시보드 콘텐츠 확인
  console.log('\n7️⃣ 대시보드 콘텐츠 확인...');
  
  await page.waitForTimeout(2000); // 페이지 로드 대기
  
  const dashboardTitle = await page.title();
  console.log(`   페이지 제목: ${dashboardTitle}`);

  // 대시보드 요소 확인
  const appbar = await page.locator('.mud-appbar').isVisible().catch(() => false);
  const drawer = await page.locator('.mud-drawer').isVisible().catch(() => false);
  const mainContent = await page.locator('.mud-main-content').isVisible().catch(() => false);
  
  console.log(`   AppBar (헤더): ${appbar ? '✅' : '❌'}`);
  console.log(`   Drawer (사이드바): ${drawer ? '✅' : '❌'}`);
  console.log(`   Main Content (본체): ${mainContent ? '✅' : '❌'}`);

  // QuantEngine 텍스트 확인
  const bodyText = await page.content();
  const hasQuantEngine = bodyText.includes('QuantEngine');
  console.log(`   QuantEngine 텍스트: ${hasQuantEngine ? '✅' : '❌'}`);

  // 최종 결과
  console.log('\n' + '═'.repeat(50));
  
  if (apiSuccess && (appbar || drawer || mainContent)) {
    console.log('✅ 로그인 성공! 대시보드 로드됨');
    console.log(`   • API: 200 OK`);
    console.log(`   • 최종 URL: ${page.url()}`);
    console.log(`   • 대시보드 요소: 확인됨`);
  } else {
    console.log('❌ 로그인 실패 또는 대시보드 미로드');
    console.log(`   • API 성공: ${apiSuccess ? '예' : '아니오'}`);
    console.log(`   • 대시보드 요소: ${appbar || drawer || mainContent ? '예' : '아니오'}`);
    console.log(`   • 최종 URL: ${page.url()}`);
  }

  console.log('═'.repeat(50) + '\n');

  // 스크린샷
  await page.screenshot({ path: 'test-results/real-login-result.png', fullPage: true });
  console.log('📸 스크린샷 저장: test-results/real-login-result.png\n');
});
