import { defineCollection, z } from "astro:content";
import { glob } from "astro/loaders";

const obsidianLoader = (path: string) =>
  glob({
    pattern: "**/[^_]*.{md,mdx}",
    base: `./src/content/${path}`,
  });

const journal = defineCollection({
  loader: obsidianLoader("journal"),
  schema: z
    .object({
      title: z.string(),
      publishDate: z.coerce.date(),
      tags: z.array(z.string()).default([]),
      author: z.string().default("Artisan"),
      isEra: z.boolean().default(false),
      era: z.string().optional(),
    })
    .passthrough(),
});

const classes = defineCollection({
  loader: obsidianLoader("classes"),
  schema: z
    .object({
      title: z.string(),
      description: z.string(),
      encre: z.enum(["martial", "arcane", "divin", "primal", "hybride"]),
      de_vie: z.string(),
      stats_prioritaires: z.array(z.string()),
      // Nouveau format pour gérer l'évolution
      evolution: z.record(z.string(), z.array(z.string())).optional(),
      couleur_theme: z.string().optional(),
    })
    .passthrough(),
});

const especes = defineCollection({
  loader: obsidianLoader("especes"),
  schema: z
    .object({
      title: z.string(),
      description: z.string(),
      spectre: z
        .enum(["solaire", "elementaire", "terrestre", "sylvestre", "ombre"])
        .default("terrestre"),
      // Ajouts pour enrichir l'espèce
      bonus_stats: z.record(z.number()).optional(), // ex: { dexterite: 2, constitution: 1 }
      traits_raciaux: z.array(z.string()).default([]),
      vitesse: z.string().default("9m"),
      langues: z.array(z.string()).default(["Commun"]),
    })
    .passthrough(),
});

const personnages = defineCollection({
  loader: obsidianLoader("personnages"),
  schema: z
    .object({
      nom: z.string(),
      titre: z.string().optional(),
      espece: z.string(), // Référence au titre de la collection especes
      niveau_global: z.number().default(1),
      maitrise: z.number().default(2),
      inspiration: z.boolean().default(false),
      classes_detail: z.array(
        z.object({
          nom: z.string(), // Référence au titre de la collection classes
          niveau: z.number(),
        }),
      ),
      // Stats précises pour le rendu des modificateurs (+3, +1, etc.)
      stats: z.object({
        force: z.number().default(10),
        dexterite: z.number().default(10),
        constitution: z.number().default(10),
        intelligence: z.number().default(10),
        sagesse: z.number().default(10),
        charisme: z.number().default(10),
      }),
      sauvegardes: z.array(z.string()).default([]),
      // Organisation par blocs visuels (comme sur l'image)
      traits_espece: z.array(z.string()).default([]),
      capacites_classe: z.array(z.string()).default([]),
      armes: z.array(z.string()).default([]),
      sorts: z.array(z.string()).default([]),
      outils: z.array(z.string()).default([]),
      description_physique: z.string().optional(),
    })
    .passthrough(),
});

export const collections = { journal, classes, especes, personnages };
