// frontend/tests/weekly/WeeklyReview.test.tsx
import { fireEvent, render, screen } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import { WeeklyReview } from "@/components/weekly/WeeklyReview";
import type { WeeklyReview as WeeklyReviewT } from "@/lib/types";

const REVIEW: WeeklyReviewT = {
  id: "wr-2026-w24",
  week_label: "6/7~6/13",
  deep_work_h: 8,
  meeting_h: 12,
  done_count: 18,
  auto_count: 12,
  saved_minutes: 196,
  patterns: [
    {
      title: "이번 주 딥워크 8h, 회의 12h",
      suggest: "화요일 오전을 ‘방해 금지’ 딥워크로 보호할까요?",
      action_kind: "automation",
      payload: { name: "화요일 오전 딥워크 보호" },
    },
  ],
  note: "이번 주 딥워크 8h, 회의 12h — 화요일 오전을 ‘방해 금지’ 딥워크로 보호할까요?",
};

describe("WeeklyReview", () => {
  it("deep_work_h/meeting_h 스탯 + 패턴 제안 텍스트 렌더", () => {
    const { container } = render(<WeeklyReview review={REVIEW} />);
    const stats = Array.from(container.querySelectorAll(".wr-stat")).map(
      (el) => el.textContent ?? "",
    );
    // 딥워크 8h / 회의 12h 스탯이 라벨과 함께 렌더
    expect(stats.some((t) => t.includes("8") && t.includes("딥워크"))).toBe(true);
    expect(stats.some((t) => t.includes("12") && t.includes("회의"))).toBe(true);
    expect(
      screen.getByText("화요일 오전을 ‘방해 금지’ 딥워크로 보호할까요?"),
    ).toBeInTheDocument();
  });

  it("적용 버튼 → onApply(pattern) 호출", () => {
    const onApply = vi.fn();
    render(<WeeklyReview review={REVIEW} onApply={onApply} />);
    fireEvent.click(screen.getByRole("button", { name: "적용" }));
    expect(onApply).toHaveBeenCalledWith(REVIEW.patterns[0]);
  });
});
