// frontend/playwright/tasks.spec.ts
// 주의: 백엔드(:31800) 시드 DB 를 변경하는 테스트 포함 → 단일 워커 직렬 실행.
import { expect, test } from "@playwright/test";
import { resetSeed } from "./fixtures/seed-reset";

test.describe.configure({ mode: "serial" });

// 깨끗한 시드에서 시작(앞선 spec 의 변경과 격리).
test.beforeAll(resetSeed);

test("초기 진입: 업무 스코프 + 칸반 5컬럼 + 리스크 레이더", async ({ page }) => {
  await page.goto("/tasks");
  await expect(page.locator(".tree-row.folder.on .tree-name")).toHaveText("업무");
  await expect(page.locator(".kboard .kcol")).toHaveCount(5);
  await expect(page.locator(".rradar")).toBeVisible();
  await expect(page.locator(".rr-ht b")).toHaveText("리스크 레이더");
});

test("폴더 펼침 → 프로젝트 필터 + 브레드크럼", async ({ page }) => {
  await page.goto("/tasks");
  await page.locator(".tree-row", { hasText: "분기 리포트" }).first().click();
  await expect(page.locator(".kcard-title", { hasText: "분기 리포트 초안 마무리" })).toBeVisible();
  await expect(page.locator(".kcard-title", { hasText: "사용자 인터뷰 5건 정리" })).toHaveCount(0);
  await expect(page.locator(".crumbs .cur")).toContainText("분기 리포트");
});

test("뷰 전환 칸반 ↔ 리스트", async ({ page }) => {
  await page.goto("/tasks");
  await page.locator(".view-seg button", { hasText: "리스트" }).click();
  await expect(page.locator(".lgroups")).toBeVisible();
  await expect(page.locator(".lgroup").first()).toBeVisible();
  await page.locator(".view-seg button", { hasText: "칸반" }).click();
  await expect(page.locator(".kboard")).toBeVisible();
});

test("리스크 레이더 CTA → 작업 드로어 열기", async ({ page }) => {
  await page.goto("/tasks");
  await page.locator(".rr-item.t-coral .rr-cta", { hasText: "작업 열기" }).click();
  await expect(page.locator(".dpanel .dp-title")).toContainText("분기 리포트 초안 마무리");
});

test("드로어: 하위작업 드릴다운 → 상위 복귀 → 댓글", async ({ page }) => {
  await page.goto("/tasks");
  await page.locator(".kcard", { hasText: "분기 리포트 초안 마무리" }).click();
  await expect(page.locator(".dpanel")).toBeVisible();
  await page.locator(".subrow", { hasText: "매출 섹션 작성" }).click();
  await expect(page.locator(".dp-crumbs .cz.cur")).toHaveText("매출 섹션 작성");
  await page.locator(".dp-crumbs button.cz", { hasText: "분기 리포트 초안 마무리" }).click();
  await page.locator(".cmt-compose input").fill("진행 상황 공유드립니다");
  await page.locator(".cmt-compose input").press("Enter");
  await expect(page.locator(".cmt-text", { hasText: "진행 상황 공유드립니다" })).toBeVisible();
});

test("Auto-Scaffolding 미리보기 → 적용", async ({ page }) => {
  await page.goto("/tasks");
  await page.locator(".kcard", { hasText: "OKR 중간 점검 자료 준비" }).click();
  await page.locator(".scaffold-trigger", { hasText: "아리에게 업무 쪼개기 맡기기" }).click();
  await expect(page.locator(".scaffold-panel .sp-item").first()).toBeVisible();
  const n = await page.locator(".scaffold-panel .sp-item").count();
  expect(n).toBeGreaterThanOrEqual(4);
  await page.locator(".sp-apply").click();
  // 기존 하위 2개 + 신규 n개
  await expect(page.locator(".dpanel .subrow")).toHaveCount(n + 2);
});

test("새 프로젝트 생성 → 서버 영속(새로고침 유지)", async ({ page }) => {
  await page.goto("/tasks");
  await page.locator(".tree-add", { hasText: "새 프로젝트" }).first().click();
  await page.locator(".tree-addrow input").fill("신규 프로젝트 E2E");
  await page.locator(".tree-addrow input").press("Enter");
  await expect(page.locator(".tree-name", { hasText: "신규 프로젝트 E2E" })).toBeVisible();
  await page.reload();
  await expect(page.locator(".tree-name", { hasText: "신규 프로젝트 E2E" })).toBeVisible();
});

test("작업 상태 이동(드로어 상태 메뉴) → 영속", async ({ page }) => {
  await page.goto("/tasks");
  await page.locator(".kcard", { hasText: "스프린트 회고 문서 배포" }).click();
  await page.locator(".status-pill").click();
  await page.locator(".status-menu button", { hasText: "완료" }).click();
  await page.locator(".dp-close").click();
  const doneCol = page.locator(".kcol", { hasText: "완료" });
  await expect(doneCol.locator(".kcard", { hasText: "스프린트 회고 문서 배포" })).toBeVisible();
  await page.reload();
  await expect(
    page.locator(".kcol", { hasText: "완료" }).locator(".kcard", { hasText: "스프린트 회고 문서 배포" }),
  ).toBeVisible();
});

test("즐겨찾기: 핀 토글 → 즐겨찾기 스코프 필터", async ({ page }) => {
  await page.goto("/tasks");
  const wireRow = page.locator(".tree-row", { hasText: "와이어프레임" }).first();
  await wireRow.hover();
  await wireRow.locator(".tree-pin").click();
  const favFolder = page.locator(".tree-row.folder", { hasText: "즐겨찾기" });
  // 즐겨찾기 배지 1로 증가
  await expect(favFolder.locator(".tree-badge")).toHaveText("1");
  await favFolder.click();
  // 즐겨찾기 스코프 → onb-wire(와이어프레임) 작업만 메인에 표시
  await expect(
    page.locator(".kcard-title", { hasText: "온보딩 와이어프레임 피드백 정리" }),
  ).toBeVisible();
});
