"use client";

import { useEffect, useState } from "react";
import { account, databases } from "@/lib/appwrite";
import { Query } from "appwrite";

export default function DebugDados() {
  const [dados, setDados] = useState<any>(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    const debugarDados = async () => {
      try {
        // 1. Obter usuário atual
        const user = await account.get();
        console.log("👤 Usuário autenticado:", user);

        // 2. Buscar na coleção de usuários
        const databaseId = process.env.NEXT_PUBLIC_APPWRITE_DATABASE_ID!;
        const collectionUsuarios =
          process.env.NEXT_PUBLIC_APPWRITE_COLLECTION_USUARIOS_ID!;
        const collectionEnderecos =
          process.env.NEXT_PUBLIC_APPWRITE_COLLECTION_ENDERECOS_ID!;
        const collectionEmpresas =
          process.env.NEXT_PUBLIC_APPWRITE_COLLECTION_EMPRESAS_DADOS_ID!;

        console.log("🔍 Buscando usuário na base de dados...");
        const usuarioQuery = await databases.listDocuments(
          databaseId,
          collectionUsuarios,
          [Query.equal("auth-id-appwrite", user.$id)]
        );

        let usuarioDoc = null;
        if (usuarioQuery.documents.length > 0) {
          usuarioDoc = usuarioQuery.documents[0];
          console.log("✅ Usuário encontrado:", usuarioDoc);
        } else {
          console.log("❌ Usuário não encontrado na base");
        }

        // 3. Buscar todos os endereços (sem filtro para debug)
        console.log("🔍 Buscando endereços...");
        const enderecosQuery = await databases.listDocuments(
          databaseId,
          collectionEnderecos,
          [Query.limit(10)] // Buscar primeiros 10 para análise
        );
        console.log("📍 Endereços encontrados:", enderecosQuery.documents);

        // 4. Buscar todas as empresas (sem filtro para debug)
        console.log("🔍 Buscando empresas...");
        const empresasQuery = await databases.listDocuments(
          databaseId,
          collectionEmpresas,
          [Query.limit(10)] // Buscar primeiros 10 para análise
        );
        console.log("🏢 Empresas encontradas:", empresasQuery.documents);

        setDados({
          usuario: usuarioDoc,
          enderecos: enderecosQuery.documents,
          empresas: empresasQuery.documents,
          authUser: user,
          // Análise dos relacionamentos
          enderecosDoUsuario: usuarioDoc?.enderecos || [],
          empresasDoUsuario: usuarioDoc?.empresas || [],
          // Buscar endereços específicos do usuário
          enderecosDetalhados: usuarioDoc?.enderecos
            ? await Promise.all(
                usuarioDoc.enderecos.map(async (enderecoId: string) => {
                  try {
                    return await databases.getDocument(
                      databaseId,
                      collectionEnderecos,
                      enderecoId
                    );
                  } catch (err) {
                    console.warn(`Erro ao buscar endereço ${enderecoId}:`, err);
                    return null;
                  }
                })
              ).then((results) => results.filter(Boolean))
            : [],
          // Buscar empresas específicas do usuário
          empresasDetalhadas: usuarioDoc?.empresas
            ? await Promise.all(
                usuarioDoc.empresas.map(async (empresaId: string) => {
                  try {
                    return await databases.getDocument(
                      databaseId,
                      collectionEmpresas,
                      empresaId
                    );
                  } catch (err) {
                    console.warn(`Erro ao buscar empresa ${empresaId}:`, err);
                    return null;
                  }
                })
              ).then((results) => results.filter(Boolean))
            : [],
        });
      } catch (err: any) {
        console.error("❌ Erro no debug:", err);
        setError(err.message);
      } finally {
        setLoading(false);
      }
    };

    debugarDados();
  }, []);

  if (loading) return <div>Carregando debug...</div>;
  if (error) return <div>Erro: {error}</div>;

  return (
    <div className="p-6 max-w-4xl mx-auto">
      <h1 className="text-2xl font-bold mb-6">Debug de Dados</h1>

      <div className="grid gap-6">
        {/* Usuário Autenticado */}
        <div className="bg-blue-50 p-4 rounded-lg">
          <h2 className="text-lg font-semibold mb-2">👤 Usuário Autenticado</h2>
          <pre className="text-sm overflow-auto">
            {JSON.stringify(dados?.authUser, null, 2)}
          </pre>
        </div>

        {/* Usuário na Base */}
        <div className="bg-green-50 p-4 rounded-lg">
          <h2 className="text-lg font-semibold mb-2">
            📊 Usuário na Base de Dados
          </h2>
          {dados?.usuario ? (
            <pre className="text-sm overflow-auto">
              {JSON.stringify(dados.usuario, null, 2)}
            </pre>
          ) : (
            <p className="text-red-600">
              ❌ Usuário não encontrado na base de dados
            </p>
          )}
        </div>

        {/* Endereços do Usuário (via IDs) */}
        <div className="bg-cyan-50 p-4 rounded-lg">
          <h2 className="text-lg font-semibold mb-2">
            🔗 Endereços do Usuário ({dados?.enderecosDetalhados?.length || 0})
          </h2>
          <p className="text-sm text-gray-600 mb-2">
            IDs no usuário: {JSON.stringify(dados?.enderecosDoUsuario)}
          </p>
          <pre className="text-sm overflow-auto">
            {JSON.stringify(dados?.enderecosDetalhados, null, 2)}
          </pre>
        </div>

        {/* Empresas do Usuário (via IDs) */}
        <div className="bg-pink-50 p-4 rounded-lg">
          <h2 className="text-lg font-semibold mb-2">
            🔗 Empresas do Usuário ({dados?.empresasDetalhadas?.length || 0})
          </h2>
          <p className="text-sm text-gray-600 mb-2">
            IDs no usuário: {JSON.stringify(dados?.empresasDoUsuario)}
          </p>
          <pre className="text-sm overflow-auto">
            {JSON.stringify(dados?.empresasDetalhadas, null, 2)}
          </pre>
        </div>

        {/* Endereços */}
        <div className="bg-yellow-50 p-4 rounded-lg">
          <h2 className="text-lg font-semibold mb-2">
            📍 Todos os Endereços ({dados?.enderecos?.length || 0})
          </h2>
          <pre className="text-sm overflow-auto">
            {JSON.stringify(dados?.enderecos, null, 2)}
          </pre>
        </div>

        {/* Empresas */}
        <div className="bg-purple-50 p-4 rounded-lg">
          <h2 className="text-lg font-semibold mb-2">
            🏢 Todas as Empresas ({dados?.empresas?.length || 0})
          </h2>
          <pre className="text-sm overflow-auto">
            {JSON.stringify(dados?.empresas, null, 2)}
          </pre>
        </div>

        {/* Análise */}
        <div className="bg-red-50 p-4 rounded-lg">
          <h2 className="text-lg font-semibold mb-2">🔍 Análise</h2>
          <ul className="list-disc pl-6 space-y-1">
            <li>Usuário autenticado: {dados?.authUser ? "✅" : "❌"}</li>
            <li>Usuário na base: {dados?.usuario ? "✅" : "❌"}</li>
            <li>
              Tem endereços:{" "}
              {dados?.enderecosDetalhados?.length > 0 ? "✅" : "❌"}
            </li>
            <li>
              Tem empresas:{" "}
              {dados?.empresasDetalhadas?.length > 0 ? "✅" : "❌"}
            </li>
            {dados?.usuario && (
              <>
                <li>
                  Campo enderecos no usuário:{" "}
                  {dados.usuario.enderecos
                    ? `✅ (${dados.usuario.enderecos.length})`
                    : "❌"}
                </li>
                <li>
                  Campo empresas no usuário:{" "}
                  {dados.usuario.empresas
                    ? `✅ (${dados.usuario.empresas.length})`
                    : "❌"}
                </li>
                <li>
                  Endereços acessíveis:{" "}
                  {dados?.enderecosDetalhados?.length || 0} /{" "}
                  {dados?.usuario.enderecos?.length || 0}
                </li>
                <li>
                  Empresas acessíveis: {dados?.empresasDetalhadas?.length || 0}{" "}
                  / {dados?.usuario.empresas?.length || 0}
                </li>
              </>
            )}
          </ul>
        </div>
      </div>
    </div>
  );
}
