import { describe, expect, it } from "vitest";
import { renderHook } from "@testing-library/react";
import { useGroupedByDay } from "./useGroupedByDay";
import type { Post } from "../../../types/post";

function makePost(id: string, isoDate: string): Post {
  return {
    id,
    categoryId: 1,
    categorySlug: "x",
    language: "zh-CN",
    attachments: [],
    isRecommended: false,
    publishedAt: isoDate,
    updatedAt: isoDate,
    text: id,
  };
}

describe("useGroupedByDay", () => {
  it("groups posts by local date", () => {
    const posts: Post[] = [
      makePost("a", "2026-02-27T10:00:00.000Z"),
      makePost("b", "2026-02-27T23:00:00.000Z"),
      makePost("c", "2026-02-28T01:00:00.000Z"),
      makePost("d", "2026-05-16T12:00:00.000Z"),
    ];
    const { result } = renderHook(() => useGroupedByDay(posts, "zh-CN"));
    expect(result.current.length).toBeGreaterThanOrEqual(2);
    const allIds = result.current.flatMap((g) => g.items.map((p) => p.id));
    expect(allIds).toEqual(["a", "b", "c", "d"]);
  });

  it("preserves input order within groups", () => {
    const posts: Post[] = [
      makePost("first", "2026-03-01T10:00:00.000Z"),
      makePost("second", "2026-03-01T11:00:00.000Z"),
      makePost("third", "2026-03-01T12:00:00.000Z"),
    ];
    const { result } = renderHook(() => useGroupedByDay(posts, "en"));
    expect(result.current).toHaveLength(1);
    expect(result.current[0].items.map((p) => p.id)).toEqual([
      "first",
      "second",
      "third",
    ]);
  });

  it("returns empty array for empty input", () => {
    const { result } = renderHook(() => useGroupedByDay([], "zh-CN"));
    expect(result.current).toEqual([]);
  });
});
