/**
 * 대시보드 검증 스크립트
 * 1. 로그인
 * 2. /main으로 강제 이동 (reload)
 * 3. 대시보드 스크린샷
 */

import { chromium } from "playwright";
import * as path from "path";
import * as fs from "fs";

const BASE_URL = "http://localhost:9771";
const SCREENSHOT_DIR = path.join(__dirname, "../verification-screenshots");

async function main() {
  if (!fs.existsSync(SCREENSHOT_DIR)) {
    fs.mkdirSync(SCREENSHOT_DIR, { recursive: true });
  }

  const browser = await chromium.launch({ headless: true });
  const context = await browser.newContext({ viewport: { width: 1280, height: 800 } });
  const page = await context.newPage();

  try {
    // Step 1: 로그인 페이지 접속
    console.log("Step 1: 로그인 페이지 접속...");
    await page.goto(`${BASE_URL}/login`, { waitUntil: "commit", timeout: 30000 });
    await page.waitForTimeout(1000);

    // Step 2: 로그인
    console.log("Step 2: 로그인...");
    await page.fill("#userId", "wace");
    await page.fill("#password", "qlalfqjsgh11");
    await page.click('button[type="submit"]');

    // Step 3: 리다이렉트 대기 (최대 15초)
    console.log("Step 3: 페이지 로드 대기 (최대 15초)...");
    await page.waitForURL((url) => !url.pathname.includes("/login"), { timeout: 15000 }).catch(() => {});
    await page.waitForTimeout(4000); // 쿠키/토큰 설정 완료 대기

    // Step 4: /main으로 강제 이동 (reload)
    console.log("Step 4: /main으로 강제 이동...");
    await page.goto(`${BASE_URL}/main`, { waitUntil: "commit", timeout: 30000 });
    await page.waitForTimeout(3000); // 페이지 렌더링 대기

    // Step 5: 페이지 내용 검증 및 스크린샷
    const heading = await page.locator("h1").first().textContent().catch(() => "");
    const url = page.url();
    console.log("Step 5: 현재 URL:", url);
    console.log("  -> h1 제목:", heading?.trim() || "(없음)");

    await page.screenshot({
      path: path.join(SCREENSHOT_DIR, "main-dashboard.png"),
      fullPage: true,
    });
    console.log("  -> main-dashboard.png 저장됨");

    await browser.close();
    console.log("\n검증 완료. 스크린샷:", path.join(SCREENSHOT_DIR, "main-dashboard.png"));
  } catch (error) {
    console.error("오류:", error);
    await page.screenshot({
      path: path.join(SCREENSHOT_DIR, "dashboard-error.png"),
      fullPage: true,
    }).catch(() => {});
    await browser.close();
    process.exit(1);
  }
}

main();
