import { NextResponse } from "next/server";
import { Client, Databases } from "node-appwrite";

export const runtime = "edge";

export async function PATCH(request: Request) {
  const url = new URL(request.url);
  const id = url.pathname.split("/").pop();

  // Logs detalhados para debug
  console.log("🔍 [API] ID recebido:", id);
  console.log("🔍 [API] Tipo do ID:", typeof id);
  console.log("🔍 [API] Comprimento do ID:", id?.length);

  // Validação de ID
  if (
    !id ||
    typeof id !== "string" ||
    id === "undefined" ||
    id === "null" ||
    id.trim().length < 10
  ) {
    console.error("❌ [API] ID inválido:", {
      id,
      type: typeof id,
      length: id?.length,
    });
    return NextResponse.json(
      {
        success: false,
        error: "ID do usuário é obrigatório e deve ser válido",
        details: `ID recebido: ${id} (tipo: ${typeof id}, comprimento: ${
          id?.length
        })`,
      },
      { status: 400 }
    );
  }

  try {
    const body = await request.json();
    console.log("📤 [API] Dados para atualização:", body);

    // Usar SDK do Appwrite ao invés de HTTP direto
    const apiKey = process.env.APPWRITE_API_KEY;
    if (!apiKey) {
      console.error("❌ [API] APPWRITE_API_KEY não configurada");
      return NextResponse.json(
        { success: false, error: "Configuração do servidor ausente" },
        { status: 500 }
      );
    }

    const endpoint = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT!;
    const projectId = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID!;
    const databaseId = process.env.NEXT_PUBLIC_APPWRITE_DATABASE_ID!;
    const collectionId =
      process.env.NEXT_PUBLIC_APPWRITE_COLLECTION_USUARIOS_ID!;

    const client = new Client()
      .setEndpoint(endpoint)
      .setProject(projectId)
      .setKey(apiKey);

    const databases = new Databases(client);

    // Atualizar usando SDK
    const response = await databases.updateDocument(
      databaseId,
      collectionId,
      id.trim(),
      body
    );

    console.log("✅ [API] Usuário atualizado com sucesso via SDK!");
    return NextResponse.json({ success: true, data: response });
  } catch (error: any) {
    console.error("💥 [API] Erro na atualização via SDK:", error);
    return NextResponse.json(
      {
        success: false,
        error: "Erro interno do servidor",
        details: error.message,
      },
      { status: 500 }
    );
  }
}
