// frontend/tests/mail/MailRow.test.tsx — AI pill 렌더 규칙
import { render, screen } from "@testing-library/react";
import { describe, expect, it } from "vitest";
import { MailRow } from "@/components/mail/MailRow";
import type { AiAnalysis, EmailRow } from "@/lib/types";

const baseAi: AiAnalysis = {
  summary: "요약",
  priority: "높음",
  category: "검토 요청",
  tasks: [
    { text: "t1", project: "p", due: "6/13", prio: "높음" },
    { text: "t2", project: "p", due: "6/12", prio: "보통" },
  ],
  events: [{ title: "ev", date: "6/10", day: "오늘", time: "14:00", dur: "60분", place: "" }],
  replies: [{ tone: "수락", preview: "회신 드릴게요", body: "본문" }],
  file: { project: "온보딩 리디자인", reason: "이유" },
};

function row(over: Partial<EmailRow> = {}): EmailRow {
  return {
    id: "m1",
    account: "work",
    from: "hyunwoo",
    to: "나",
    cc: "",
    thread_id: "",
    subject: "온보딩 시안 v3",
    time: "8분 전",
    read: false,
    starred: false,
    has_attach: true,
    labels: ["디자인"],
    preview: "미리보기",
    category: "primary",
    ai: baseAi,
    ...over,
  };
}

describe("MailRow", () => {
  it("priority 높음 → 중요 pill", () => {
    render(<MailRow m={row()} on={false} onClick={() => {}} onStar={() => {}} />);
    expect(screen.getByText("중요")).toBeInTheDocument();
  });

  it("tasks/events/replies pill 카운트", () => {
    render(<MailRow m={row()} on={false} onClick={() => {}} onStar={() => {}} />);
    expect(screen.getByText("할 일 2")).toBeInTheDocument();
    expect(screen.getByText("일정 1")).toBeInTheDocument();
    expect(screen.getByText("답장 추천")).toBeInTheDocument();
  });

  it("m7 처럼 빈 ai(priority 낮음 · 전부 빈 배열)는 pill 없음", () => {
    const empty: AiAnalysis = {
      summary: "영수증",
      priority: "낮음",
      category: "영수증",
      tasks: [],
      events: [],
      replies: [],
      file: null,
    };
    render(
      <MailRow m={row({ id: "m7", ai: empty })} on={false} onClick={() => {}} onStar={() => {}} />,
    );
    expect(screen.queryByText("중요")).not.toBeInTheDocument();
    expect(screen.queryByText(/할 일/)).not.toBeInTheDocument();
    expect(screen.queryByText("답장 추천")).not.toBeInTheDocument();
  });

  it("ai 가 null 이면 pill 없음", () => {
    render(<MailRow m={row({ ai: null })} on={false} onClick={() => {}} onStar={() => {}} />);
    expect(screen.queryByText("중요")).not.toBeInTheDocument();
  });
});
