import { describe, expect, test } from "vitest";
import { analyzeArticle } from "./index";

describe("analyzeArticle", () => {
  test("perfect article scores high", () => {
    const r = analyzeArticle({
      title: "Bitcoin vượt 100k USD: 5 yếu tố thúc đẩy đợt tăng giá 2026",
      metaTitle: "Bitcoin vượt 100k USD: 5 yếu tố quan trọng năm 2026",
      slug: "bitcoin-vuot-100k-usd-2026",
      metaDesc:
        "Bitcoin vượt 100k USD lần đầu trong năm 2026 nhờ ETF, halving và dòng tiền tổ chức. Phân tích các yếu tố quyết định.",
      focusKeyword: "Bitcoin vượt 100k",
      content: `## Bitcoin vượt 100k USD là sự kiện lịch sử

Bitcoin vượt 100k USD lần đầu trong năm 2026 nhờ nhiều yếu tố hội tụ. Bài viết phân tích chi tiết các nguyên nhân đứng sau cú breakout này.

![Biểu đồ Bitcoin](https://img.example.com/btc.png)

## Yếu tố 1: ETF spot Bitcoin

[Báo cáo Bloomberg](https://bloomberg.com/btc) chỉ ra rằng dòng tiền vào ETF spot Bitcoin đã vượt 50 tỷ USD năm 2025.

## Yếu tố 2: Halving

Halving 2024 cắt một nửa nguồn cung mới — đẩy giá lên trong 12 tháng tiếp theo theo lịch sử.

## Yếu tố 3: Dòng tiền tổ chức

[Phân tích nội bộ](/altcoin-season-la-gi) chỉ ra rằng các quỹ lớn đang gom Bitcoin.

## Tóm lại

Bitcoin vượt 100k USD là kết quả của nhiều yếu tố. Nhà đầu tư cần đánh giá kỹ rủi ro trước khi tham gia thị trường này.

${"Lorem ipsum dolor sit amet ".repeat(100)}`,
      coverImage: "https://img.example.com/btc-cover.png",
      coverAlt: "Bitcoin vượt 100k USD",
      host: "v2.finzone.io.vn",
      locale: "vi",
    });

    expect(r.score).toBeGreaterThan(70);
    expect(r.grade).not.toBe("F");
    expect(r.stats.wordCount).toBeGreaterThan(300);
    expect(r.stats.subheadings).toBeGreaterThanOrEqual(3);
    expect(r.checks.find((c) => c.id === "keywordInTitle")?.score).toBeGreaterThan(0);
  });

  test("empty article scores 0 / F", () => {
    const r = analyzeArticle({
      title: "",
      slug: "",
      content: "",
    });
    expect(r.score).toBeLessThan(40);
    expect(r.grade).toBe("F");
  });

  test("article without focus keyword still gets length checks", () => {
    const r = analyzeArticle({
      title: "Phân tích chứng khoán Việt Nam",
      slug: "phan-tich-vn",
      content: "## Một đoạn ngắn\n\n" + "Câu ngắn. ".repeat(200),
    });
    expect(r.checks.find((c) => c.id === "lengthContent")?.score).toBeGreaterThan(0);
    // No keyword → keyword checks are skipped
    expect(r.checks.find((c) => c.id === "keywordInTitle")).toBeUndefined();
  });

  test("keyword density too high", () => {
    const r = analyzeArticle({
      title: "Bitcoin",
      slug: "bitcoin",
      focusKeyword: "Bitcoin",
      content: "Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin",
    });
    const density = r.checks.find((c) => c.id === "keywordDensity");
    expect(density?.score).toBe(0);
    expect(density?.text).toMatch(/quá cao/);
  });

  test("keyword density just right", () => {
    const r = analyzeArticle({
      title: "Bitcoin tăng giá",
      slug: "bitcoin-tang-gia",
      focusKeyword: "Bitcoin",
      content:
        "Bitcoin là tiền điện tử lớn nhất. " +
        "Năm 2026 chứng kiến nhiều biến động. ".repeat(40) +
        " Bitcoin tiếp tục dẫn đầu thị trường.",
    });
    const density = r.checks.find((c) => c.id === "keywordDensity");
    expect(density?.score).toBeGreaterThan(0);
  });

  test("flesch returns null for very short text", () => {
    const r = analyzeArticle({
      title: "X",
      slug: "x",
      content: "abc def",
    });
    expect(r.stats.fleschScore).toBeNull();
  });

  test("internal vs external links classification", () => {
    const r = analyzeArticle({
      title: "Test",
      slug: "test",
      content: `Câu một. [internal](/a) Câu hai. [external](https://google.com).
        ${"Lorem ipsum ".repeat(200)}`,
      host: "v2.finzone.io.vn",
    });
    expect(r.stats.internalLinks).toBeGreaterThan(0);
    expect(r.stats.externalLinks).toBeGreaterThan(0);
  });
});
