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

export const runtime = 'edge';

// 🔄 PATCH - Atualizar categoria
export async function PATCH(request: Request, { params }: { params: { id: string } }) {
  const { id } = params;
  
  if (!id || typeof id !== 'string') {
    console.error("❌ [API] ID da categoria não fornecido ou inválido");
    return NextResponse.json(
      { success: false, error: "ID da categoria é obrigatório" },
      { status: 400 }
    );
  }
  
  console.log('🔄 [API] Atualizando categoria:', id);

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

    // Validação dos dados obrigatórios
    if (!body.nome || !body.nome.trim()) {
      console.error("❌ [API] Nome da categoria é obrigatório");
      return NextResponse.json(
        { success: false, error: "Nome da categoria é obrigatório" },
        { status: 400 }
      );
    }

    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_CATEGORIAS_ID!;

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

    const databases = new Databases(client);

    // Preparar dados para atualização
    const dadosAtualizacao = {
      nome: body.nome.trim(),
      descricao: body.descricao?.trim() || "",
      slug: body.slug?.trim() || body.nome.toLowerCase().replace(/\s+/g, "-"),
    };

    console.log("📝 [API] Dados preparados para atualização:", dadosAtualizacao);

    // Atualizar categoria
    const categoriaAtualizada = await databases.updateDocument(
      databaseId,
      collectionId,
      id,
      dadosAtualizacao
    );

    console.log('✅ [API] Categoria atualizada com sucesso!');
    return NextResponse.json({ 
      success: true,
      sucesso: true,
      data: categoriaAtualizada,
      categoria: categoriaAtualizada,
      mensagem: "Categoria atualizada com sucesso!"
    });

  } catch (error: any) {
    console.error('💥 [API] Erro na atualização:', error);
    
    // Tratamento específico para erros do Appwrite
    if (error.code) {
      return NextResponse.json(
        { 
          success: false,
          sucesso: false,
          error: `Erro do Appwrite: ${error.message}`, 
          details: {
            code: error.code,
            type: error.type,
            message: error.message
          }
        },
        { status: error.code === 400 ? 400 : 500 }
      );
    }
    
    return NextResponse.json(
      { 
        success: false,
        sucesso: false,
        error: "Erro interno do servidor", 
        details: error instanceof Error ? error.message : String(error)
      },
      { status: 500 }
    );
  }
}

// 🗑️ DELETE - Excluir categoria
export async function DELETE(request: Request, { params }: { params: { id: string } }) {
  const { id } = params;
  
  if (!id || typeof id !== 'string') {
    console.error("❌ [API] ID da categoria não fornecido ou inválido");
    return NextResponse.json(
      { success: false, error: "ID da categoria é obrigatório" },
      { status: 400 }
    );
  }
  
  console.log('🗑️ [API] Excluindo categoria:', id);

  try {
    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_CATEGORIAS_ID!;

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

    const databases = new Databases(client);

    await databases.deleteDocument(databaseId, collectionId, id);

    console.log('✅ [API] Categoria excluída com sucesso!');
    return NextResponse.json({ 
      success: true,
      sucesso: true,
      mensagem: "Categoria excluída com sucesso!"
    });

  } catch (error: any) {
    console.error('💥 [API] Erro na exclusão:', error);
    
    // Tratamento específico para erros do Appwrite
    if (error.code) {
      return NextResponse.json(
        { 
          success: false,
          sucesso: false,
          error: `Erro do Appwrite: ${error.message}`, 
          details: {
            code: error.code,
            type: error.type,
            message: error.message
          }
        },
        { status: error.code === 404 ? 404 : 500 }
      );
    }
    
    return NextResponse.json(
      { 
        success: false,
        sucesso: false,
        error: "Erro interno do servidor", 
        details: error instanceof Error ? error.message : String(error)
      },
      { status: 500 }
    );
  }
}
