import { describe, expect, it } from "vitest";

import { PrivateAlbumSchema } from "@/data/schemas/private-zone";

import {
  findPrivateAlbumDisplayImage,
  getPrivateAlbumDisplayImages,
  getPrivateAlbumGridLayout,
} from "../private-album-images";

describe("private album display images", () => {
  const album = PrivateAlbumSchema.parse({
    albumId: "album-1",
    images: [
      { url: " /images/photo-1.png ", locked: false, index: 0 },
      { url: "/images/photo-2.png", locked: true, index: 1 },
      { url: "  ", locked: false, index: 2 },
      { url: "/images/photo-4.png", locked: false, index: 3 },
    ],
    unlocked: true,
    lockDetail: { locked: false },
  });

  it("filters unavailable images while preserving source indexes", () => {
    expect(getPrivateAlbumDisplayImages(album)).toEqual([
      { sourceIndex: 0, url: "/images/photo-1.png" },
      { sourceIndex: 3, url: "/images/photo-4.png" },
    ]);
  });

  it("resolves Gallery images by their original source index", () => {
    expect(findPrivateAlbumDisplayImage(album, 3)).toEqual({
      sourceIndex: 3,
      url: "/images/photo-4.png",
    });
    expect(findPrivateAlbumDisplayImage(album, 1)).toBeNull();
    expect(findPrivateAlbumDisplayImage(album, 2)).toBeNull();
  });

  it.each([
    [0, "empty"],
    [1, "single"],
    [2, "double"],
    [3, "triple"],
    [4, "double"],
    [5, "triple"],
    [9, "triple"],
  ] as const)("uses the expected grid for %i images", (count, layout) => {
    expect(getPrivateAlbumGridLayout(count)).toBe(layout);
  });
});
