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

export const runtime = "edge";

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

    if (!body.categoria || !body.categoria.trim()) {
      console.error("❌ [API] Categoria pai é obrigatória");
      return NextResponse.json(
        { success: false, error: "Categoria pai é obrigatória" },
        { 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_SUBCATEGORIAS_ID!;

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

    const databases = new Databases(client);

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

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

    // Tentar atualizar com dados completos primeiro
    try {
      const subcategoriaAtualizada = await databases.updateDocument(
        databaseId,
        collectionId,
        id,
        dadosAtualizacao
      );

      console.log("✅ [API] Subcategoria atualizada com sucesso!");
      return NextResponse.json({
        success: true,
        sucesso: true, // Compatibilidade dupla
        data: subcategoriaAtualizada,
        subcategoria: subcategoriaAtualizada,
        mensagem: "Subcategoria atualizada com sucesso!",
      });
      
    } catch (updateError: any) {
      console.warn("⚠️ [API] Primeira tentativa falhou, tentando com dados simplificados:", updateError.message);
      
      // Se falhar, tentar apenas com dados essenciais
      try {
        const dadosSimplesAtualizacao = {
          nome: body.nome.trim(),
          categoria: body.categoria.trim(),
        };
        
        console.log("📝 [API] Tentando atualização com dados simplificados:", dadosSimplesAtualizacao);
        
        const subcategoriaAtualizada = await databases.updateDocument(
          databaseId,
          collectionId,
          id,
          dadosSimplesAtualizacao
        );

        console.log("✅ [API] Subcategoria atualizada com dados simplificados!");
        return NextResponse.json({
          success: true,
          sucesso: true,
          data: subcategoriaAtualizada,
          subcategoria: subcategoriaAtualizada,
          mensagem: "Subcategoria atualizada com sucesso (modo simplificado)!",
        });
        
      } catch (secondError: any) {
        console.error("❌ [API] Segunda tentativa também falhou:", secondError);
        throw secondError; // Deixar o catch principal tratar
      }
    }

  } 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 subcategoria
export async function DELETE(request: Request, { params }: { params: { id: string } }) {
  const { id } = params;
  
  if (!id || typeof id !== 'string') {
    console.error("❌ [API] ID da subcategoria não fornecido ou inválido");
    return NextResponse.json(
      { success: false, error: "ID da subcategoria é obrigatório" },
      { status: 400 }
    );
  }
  
  console.log("🗑️ [API] Excluindo subcategoria:", 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_SUBCATEGORIAS_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] Subcategoria excluída com sucesso!");
    return NextResponse.json({ 
      success: true,
      sucesso: true,
      mensagem: "Subcategoria 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 }
    );
  }
}
