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

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

  try {
    const formData = await request.formData();
    const file = formData.get("photo") as File;

    if (!file) {
      throw error(400, "Aucun fichier fourni");
    }

    // Vérifier le type de fichier
    if (!file.type.startsWith("image/")) {
      throw error(400, "Le fichier doit être une image");
    }

    // Vérifier la taille (max 5MB)
    if (file.size > 5 * 1024 * 1024) {
      throw error(400, "L'image ne doit pas dépasser 5 MB");
    }

    // Générer un nom de fichier unique
    const timestamp = Date.now();
    const extension = file.name.split(".").pop();
    const fileName = `profiles/${locals.user.id}-${timestamp}.${extension}`;

    // Upload sur R2
    const result = await uploadToR2(file, fileName, file.type);
    const photoUrl = result.url;

    // Mettre à jour l'utilisateur dans la base de données
    const db = await getSurrealDB();
    const userId = locals.user.id.replace('user:', '');
    
    console.log('Updating avatar_url for user:', userId);
    console.log('Photo URL:', photoUrl);
    
    const updateResult = await db.query(
      `UPDATE type::thing("user", $userId) SET avatar_url = $photoUrl`,
      { 
        userId,
        photoUrl 
      }
    );
    
    console.log('Update result:', updateResult);

    return json({ 
      success: true, 
      photoUrl 
    });
  } catch (err) {
    console.error("Error uploading profile photo:", err);
    if (err instanceof Response) throw err;
    throw error(500, "Erreur lors de l'upload de la photo");
  }
};
