import { chromium } from "@playwright/test";

(async () => {
  console.log("════════════════════════════════════════════════════════");
  console.log("             🔐 COMPLETE LOGIN FLOW TEST");
  console.log("════════════════════════════════════════════════════════\n");
  
  const b = await chromium.launch({ headless: false });
  const p = await b.newPage();
  
  // 모든 콘솔 로그 캡처
  const consoleLogs = [];
  p.on("console", msg => {
    const text = msg.text();
    consoleLogs.push(text);
    if (text.includes("[Login]") || text.includes("[Dashboard]") || text.includes("[Auth]")) {
      console.log(`  📝 ${text}`);
    }
  });
  
  // 요청/응답 모니터링
  p.on("response", res => {
    if (res.url().includes("auth") || res.url().includes("dashboard")) {
      console.log(`  📡 ${res.status()} ${res.url().split('/').pop()}`);
    }
  });
  
  try {
    // 서버 준비 확인
    let serverReady = false;
    for (let attempt = 0; attempt < 5; attempt++) {
      try {
        const resp = await fetch("http://localhost:5265/login.html");
        if (resp.ok) {
          serverReady = true;
          break;
        }
      } catch (e) {}
      console.log(`  [대기] 서버 시작 확인 중... (${attempt + 1}/5)`);
      await new Promise(r => setTimeout(r, 5000));
    }
    
    if (!serverReady) {
      console.log("  ❌ 서버가 시작되지 않음");
      await b.close();
      return;
    }
    
    console.log("\n✅ 서버 준비 완료!\n");
    
    // STEP 1: 로그인 페이지 로드
    console.log("1️⃣  로그인 페이지 로드");
    await p.goto("http://localhost:5265/login.html", { waitUntil: "networkidle" });
    console.log("   ✓ 페이지 로드됨\n");
    
    // STEP 2: 폼 입력
    console.log("2️⃣  로그인 폼 입력 (admin/admin)");
    await p.fill("input[name='username']", "admin");
    await p.fill("input[name='password']", "admin");
    console.log("   ✓ 입력 완료\n");
    
    // STEP 3: 로그인 제출
    console.log("3️⃣  로그인 버튼 클릭");
    await p.click("button[type='submit']");
    console.log("   ✓ 클릭됨\n");
    
    // STEP 4: 상태 모니터링 (10초)
    console.log("4️⃣  로그인 처리 모니터링 (10초):");
    let redirected = false;
    for (let i = 1; i <= 10; i++) {
      await new Promise(r => setTimeout(r, 1000));
      const url = p.url();
      const title = await p.title();
      
      process.stdout.write(`   [${i}s] URL: ${url}`);
      
      if (!url.includes("login")) {
        console.log(" ✅ REDIRECTED!");
        redirected = true;
        break;
      } else {
        console.log("");
      }
    }
    
    console.log("\n5️⃣  최종 상태:");
    const finalUrl = p.url();
    const finalTitle = await p.title();
    
    console.log(`   📍 URL: ${finalUrl}`);
    console.log(`   📄 Page Title: ${finalTitle}`);
    
    if (finalUrl.includes("/dashboard")) {
      console.log("   ✅ 대시보드 URL 확인됨!");
      
      const content = await p.content();
      if (content.includes("관리자 대시보드")) {
        console.log("   ✅ 대시보드 콘텐츠 확인됨!");
        console.log("\n🎉 로그인 성공! 대시보드 정상 로드!\n");
      } else if (content.includes("Not Found")) {
        console.log("   ❌ Not Found 에러");
      } else {
        console.log("   ⚠️  대시보드 콘텐츠 미확인");
      }
    } else if (finalUrl.includes("/login")) {
      console.log("   ❌ 다시 로그인 페이지로 리다이렉트됨");
      console.log("   → 대시보드 인증 체크에서 실패한 것 같습니다");
    } else if (finalUrl.includes("/not-found")) {
      console.log("   ❌ /not-found 에러");
    } else {
      console.log("   ⚠️  예상치 못한 페이지");
    }
    
    // 스크린샷
    await p.screenshot({ path: "./direct-test-result.png", fullPage: true });
    console.log("   📷 스크린샷: direct-test-result.png");
    
    console.log("\n════════════════════════════════════════════════════════");
    console.log("            테스트 완료");
    console.log("════════════════════════════════════════════════════════");
    
  } catch (e) {
    console.error("❌ 테스트 에러:", e.message);
  } finally {
    await b.close();
  }
})();
