Skip to content
import { define } from "../../utils.ts";
import { startingDeck } from "../../lib/game.ts";
import { createHero, isClassId } from "../../lib/heroes.ts";

export const handler = define.handlers({
  async POST(ctx) {
    const user = ctx.state.user;
    if (!user) return new Response("Unauthorized", { status: 401 });

    let body: unknown;
    try {
      body = await ctx.req.json();
    } catch {
      return Response.json({ error: "Invalid JSON." }, { status: 400 });
    }
    const { name, klass } = (body ?? {}) as { name?: unknown; klass?: unknown };

    const heroName = typeof name === "string" ? name.trim().slice(0, 24) : "";
    if (heroName.length < 2) {
      return Response.json(
        { error: "Hero name must be at least 2 characters." },
        { status: 400 },
      );
    }
    if (!isClassId(klass)) {
      return Response.json({ error: "Choose a class." }, { status: 400 });
    }

    const hero = await createHero(
      user.id,
      heroName,
      klass,
      startingDeck(klass),
    );
    return Response.json({ hero });
  },
});