import { defineCollection } from "astro:content";
import { z } from "astro/zod";

import { extendedGlob } from "./loaders/extended-glob";
import { glob } from "astro/loaders";

const blog = defineCollection({
  loader: extendedGlob({
    pattern: "**/*.(md|mdx|gmi|html)",
    base: "./src/content/blog",
    postprocessSlug: (slug: string) => slug.replaceAll(/^capsule-longlog\//g, ""),
    ignore: [
      "capsule-longlog/index.gmi",
      /* Some blog posts were ported to gemtext. Don't port them back again:
       * that would lead to duplicates! The originals are likely to be better
       * anyway, as MD/MDX are richer languages. */
      "**/2024-01-14.gmi",
      "**/2024-01-29.gmi",
      "**/2024-03-30.gmi",
      "**/2024-04-10.gmi",
      "**/2024-04-11.gmi",
      "**/2024-04-14.gmi",
      "**/2024-05-02.gmi",
      "**/2024-06-13.gmi",
      "**/2024-07-08.gmi",
      "**/2024-07-16.gmi",
      "**/2024-12-17.gmi",
      "**/2025-01-19.gmi",
      "**/2025-01-24.gmi",
      "**/2025-01-28.gmi",
      "**/2025-05-02.gmi",
      "**/2025-05-04.gmi",
      "**/2025-06-23.gmi",
      "**/2025-07-03.gmi",
      "**/2025-09-18.gmi",
      "**/2025-09-24.gmi",
      "**/2025-10-05.gmi",
      "**/2025-10-09.gmi",
      "**/2025-12-11.gmi",
      "**/2026-02-16.gmi",
      "**/2026-03-04.gmi",
    ],
  }),
  schema: z.object({
    title: z.string(),
    hidden: z.optional(z.boolean()),
    description: z.optional(z.string()),
    pubDate: z.optional(z.date()),
    updatedDate: z.optional(z.date()),
  }),
});

const microlog = defineCollection({
  loader: glob({
    pattern: "**/*.gmi",
    base: "./src/content/microlog",
    generateId: ({ entry }) => entry.replace(/\.gmi$/, ""),
  }),
});

export const collections = { blog, microlog };
