import type { RequestHandler } from "./$types";
import { json, error } from "@sveltejs/kit";
import { getSurrealDB } from "$lib/server/db";

export const PATCH: RequestHandler = async ({ request, locals, params }) => {
  if (!locals.user) {
    throw error(401, "Non autorisé");
  }

  try {
    const data = await request.json();
    const db = await getSurrealDB();

    // Normaliser l'ID pour éviter un préfixe "template:" déjà présent
    const templateId = params.id.includes(":") ? params.id.split(":").pop() : params.id;

    const allowedFields = [
      "name",
      "description",
      "category",
      "duration_seconds",
      "format",
      "price",
      "config",
      "plainly_template_id",
      "in_production",
    ];

    const updates: any = {};
    for (const field of allowedFields) {
      if (data[field] !== undefined) {
        updates[field] = data[field];
      }
    }

    if (Object.keys(updates).length === 0) {
      throw error(400, "Aucune donnée à mettre à jour");
    }

    const updateQuery = Object.keys(updates)
      .map(key => `${key} = $${key}`)
      .join(", ");

    const result = await db.query(
      `UPDATE type::thing("template", $templateId) SET ${updateQuery}, updated_at = time::now() RETURN AFTER`,
      { templateId, ...updates }
    );

    return json({ 
      success: true,
      template: (result as any[])[0]?.[0]
    });
  } catch (err) {
    console.error("Error updating template:", err);
    if (err instanceof Response) throw err;
    throw error(500, "Erreur lors de la mise à jour");
  }
};
