import { NextRequest, NextResponse } from "next/server";

export const runtime = "edge";

// Mapeamento dos tipos de coleção - corrigindo nomes das variáveis
const COLLECTION_MAP = {
  catalogo: process.env.NEXT_PUBLIC_APPWRITE_COLLECTION_PRODUTOS_CATALOGO_ID,
  venda: process.env.NEXT_PUBLIC_APPWRITE_COLLECTION_PRODUTOS_VENDA_ID,
  estoque: process.env.NEXT_PUBLIC_APPWRITE_COLLECTION_PRODUTOS_ESTOQUE_ID,
};

export async function GET(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  // Log de debug da API Key
  console.log("🔑 API KEY prefix:", process.env.APPWRITE_API_KEY?.slice(0, 10));
  
  try {
    const { id } = params;
    const { searchParams } = new URL(request.url);
    const tipo = searchParams.get("tipo") || "venda"; // Default: venda

    console.log("📋 [API] Buscando produto por ID...", { id, tipo });

    // Validar tipo de coleção
    if (!COLLECTION_MAP[tipo as keyof typeof COLLECTION_MAP]) {
      console.error("❌ [API] Tipo de coleção inválido:", tipo);
      return NextResponse.json(
        { 
          success: false, 
          error: "Tipo de coleção inválido", 
          details: `Tipos válidos: ${Object.keys(COLLECTION_MAP).join(", ")}` 
        },
        { status: 400 }
      );
    }

    // Verificar configurações obrigatórias
    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", details: "APPWRITE_API_KEY não configurada" },
        { 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 = COLLECTION_MAP[tipo as keyof typeof COLLECTION_MAP];

    if (!endpoint || !projectId || !databaseId || !collectionId) {
      console.error("❌ [API] Configurações do Appwrite ausentes");
      console.error("Debug config:", { 
        endpoint: !!endpoint, 
        projectId: !!projectId, 
        databaseId: !!databaseId, 
        collectionId: !!collectionId,
        tipo,
        availableCollections: Object.keys(COLLECTION_MAP)
      });
      return NextResponse.json(
        { 
          success: false, 
          error: "Configurações do Appwrite ausentes",
          details: { endpoint: !!endpoint, projectId: !!projectId, databaseId: !!databaseId, collectionId: !!collectionId }
        },
        { status: 500 }
      );
    }

    console.log("🎯 [API] Usando coleção:", { tipo, collectionId });
    console.log("🔧 [API] Headers que serão enviados:", {
      "X-Appwrite-Project": projectId,
      "X-Appwrite-Key": apiKey?.slice(0, 10) + "...",
      "Content-Type": "application/json"
    });

    // Construir URL da API do Appwrite
    const apiUrl = `${endpoint}/databases/${databaseId}/collections/${collectionId}/documents/${id}`;
    console.log("📡 [API] URL da requisição:", apiUrl);

    // Fazer requisição direta para a API do Appwrite
    const response = await fetch(apiUrl, {
      method: "GET",
      headers: {
        "Content-Type": "application/json",
        "X-Appwrite-Project": projectId,
        "X-Appwrite-Key": apiKey,
      },
      cache: "no-store"
    });

    console.log("📡 [API] Status da resposta:", response.status);

    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}));
      console.error("❌ [API] Erro na requisição:", response.status, errorData);
      console.error("🔍 [API] Headers enviados:", {
        "X-Appwrite-Project": projectId,
        "X-Appwrite-Key": apiKey?.slice(0, 10) + "...",
      });
      return NextResponse.json(
        {
          success: false,
          error: `Erro ao buscar produto: ${response.status}`,
          details: errorData
        },
        { status: response.status }
      );
    }

    const data = await response.json();
    console.log("✅ [API] Produto encontrado:", { id, tipo });

    return NextResponse.json({
      success: true,
      tipo,
      document: data
    });

  } catch (error) {
    console.error("💥 [API] Erro ao buscar produto:", error);
    return NextResponse.json(
      { 
        success: false, 
        error: "Erro interno do servidor",
        details: error instanceof Error ? error.message : String(error)
      },
      { status: 500 }
    );
  }
}

export async function PATCH(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  // Log de debug da API Key
  console.log("🔑 API KEY prefix:", process.env.APPWRITE_API_KEY?.slice(0, 10));
  
  try {
    const { id } = params;
    const { searchParams } = new URL(request.url);
    const tipo = searchParams.get("tipo") || "venda"; // Default: venda

    console.log("✏️ [API] Atualizando produto...", { id, tipo });

    // Validar tipo de coleção
    if (!COLLECTION_MAP[tipo as keyof typeof COLLECTION_MAP]) {
      console.error("❌ [API] Tipo de coleção inválido:", tipo);
      return NextResponse.json(
        { 
          success: false, 
          error: "Tipo de coleção inválido", 
          details: `Tipos válidos: ${Object.keys(COLLECTION_MAP).join(", ")}` 
        },
        { status: 400 }
      );
    }

    // Verificar configurações obrigatórias
    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", details: "APPWRITE_API_KEY não configurada" },
        { 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 = COLLECTION_MAP[tipo as keyof typeof COLLECTION_MAP];

    if (!endpoint || !projectId || !databaseId || !collectionId) {
      console.error("❌ [API] Configurações do Appwrite ausentes");
      console.error("Debug config:", { 
        endpoint: !!endpoint, 
        projectId: !!projectId, 
        databaseId: !!databaseId, 
        collectionId: !!collectionId,
        tipo,
        availableCollections: Object.keys(COLLECTION_MAP)
      });
      return NextResponse.json(
        { 
          success: false, 
          error: "Configurações do Appwrite ausentes",
          details: { endpoint: !!endpoint, projectId: !!projectId, databaseId: !!databaseId, collectionId: !!collectionId }
        },
        { status: 500 }
      );
    }

    console.log("🎯 [API] Usando coleção:", { tipo, collectionId });
    console.log("🔧 [API] Headers que serão enviados:", {
      "X-Appwrite-Project": projectId,
      "X-Appwrite-Key": apiKey?.slice(0, 10) + "...",
      "Content-Type": "application/json"
    });

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

    // Preparar dados para atualização
    const updateData = body.data || body;
    console.log("📝 [API] Dados preparados para atualização:", updateData);

    // Construir URL da API do Appwrite
    const apiUrl = `${endpoint}/databases/${databaseId}/collections/${collectionId}/documents/${id}`;
    console.log("📡 [API] URL da atualização:", apiUrl);

    const response = await fetch(apiUrl, {
      method: "PATCH",
      headers: {
        "Content-Type": "application/json",
        "X-Appwrite-Project": projectId,
        "X-Appwrite-Key": apiKey,
      },
      body: JSON.stringify(updateData),
    });

    console.log("📡 [API] Status da atualização:", response.status);

    if (response.ok) {
      const data = await response.json();
      console.log("✅ [API] Produto atualizado com sucesso!");
      return NextResponse.json({ success: true, tipo, data });
    } else {
      const errorData = await response.json().catch(() => ({}));
      console.error("❌ [API] Erro ao atualizar:", response.status, errorData);
      console.error("🔍 [API] Headers enviados:", {
        "X-Appwrite-Project": projectId,
        "X-Appwrite-Key": apiKey?.slice(0, 10) + "...",
      });
      return NextResponse.json(
        {
          success: false,
          error: errorData.message || "Erro ao atualizar produto",
          details: errorData,
        },
        { status: response.status }
      );
    }
  } catch (error) {
    console.error("💥 [API] Erro na atualização:", error);
    return NextResponse.json(
      { 
        success: false, 
        error: "Erro interno do servidor",
        details: error instanceof Error ? error.message : String(error)
      },
      { status: 500 }
    );
  }
}

export async function DELETE(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  // Log de debug da API Key
  console.log("🔑 API KEY prefix:", process.env.APPWRITE_API_KEY?.slice(0, 10));
  
  try {
    const { id } = params;
    const { searchParams } = new URL(request.url);
    const tipo = searchParams.get("tipo") || "venda"; // Default: venda

    console.log("🗑️ [API] Deletando produto...", { id, tipo });

    // Validar tipo de coleção
    if (!COLLECTION_MAP[tipo as keyof typeof COLLECTION_MAP]) {
      console.error("❌ [API] Tipo de coleção inválido:", tipo);
      return NextResponse.json(
        { 
          success: false, 
          error: "Tipo de coleção inválido", 
          details: `Tipos válidos: ${Object.keys(COLLECTION_MAP).join(", ")}` 
        },
        { status: 400 }
      );
    }

    // Verificar configurações obrigatórias
    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", details: "APPWRITE_API_KEY não configurada" },
        { 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 = COLLECTION_MAP[tipo as keyof typeof COLLECTION_MAP];

    if (!endpoint || !projectId || !databaseId || !collectionId) {
      console.error("❌ [API] Configurações do Appwrite ausentes");
      console.error("Debug config:", { 
        endpoint: !!endpoint, 
        projectId: !!projectId, 
        databaseId: !!databaseId, 
        collectionId: !!collectionId,
        tipo,
        availableCollections: Object.keys(COLLECTION_MAP)
      });
      return NextResponse.json(
        { 
          success: false, 
          error: "Configurações do Appwrite ausentes",
          details: { endpoint: !!endpoint, projectId: !!projectId, databaseId: !!databaseId, collectionId: !!collectionId }
        },
        { status: 500 }
      );
    }

    console.log("🎯 [API] Usando coleção:", { tipo, collectionId });
    console.log("🔧 [API] Headers que serão enviados:", {
      "X-Appwrite-Project": projectId,
      "X-Appwrite-Key": apiKey?.slice(0, 10) + "...",
      "Content-Type": "application/json"
    });

    // Construir URL da API do Appwrite
    const apiUrl = `${endpoint}/databases/${databaseId}/collections/${collectionId}/documents/${id}`;
    console.log("📡 [API] URL da deleção:", apiUrl);

    const response = await fetch(apiUrl, {
      method: "DELETE",
      headers: {
        "Content-Type": "application/json",
        "X-Appwrite-Project": projectId,
        "X-Appwrite-Key": apiKey,
      },
    });

    console.log("📡 [API] Status da deleção:", response.status);

    if (response.status === 204) {
      console.log("✅ [API] Produto deletado com sucesso!");
      return NextResponse.json({ success: true, tipo, message: "Produto deletado com sucesso" });
    } else {
      const errorData = await response.json().catch(() => ({}));
      console.error("❌ [API] Erro ao deletar:", response.status, errorData);
      console.error("🔍 [API] Headers enviados:", {
        "X-Appwrite-Project": projectId,
        "X-Appwrite-Key": apiKey?.slice(0, 10) + "...",
      });
      return NextResponse.json(
        {
          success: false,
          error: errorData.message || "Erro ao deletar produto",
          details: errorData,
        },
        { status: response.status }
      );
    }
  } catch (error) {
    console.error("💥 [API] Erro na deleção:", error);
    return NextResponse.json(
      { 
        success: false, 
        error: "Erro interno do servidor",
        details: error instanceof Error ? error.message : String(error)
      },
      { status: 500 }
    );
  }
}
