"use client";

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

export default function DiagnosticoCompleto() {
  const [resultado, setResultado] = useState<string>("");
  const [carregando, setCarregando] = useState(false);

  const diagnosticar = async () => {
    setCarregando(true);
    setResultado("");

    try {
      console.log("🔍 Iniciando diagnóstico completo...");

      // 1. Verificar usuário autenticado
      console.log("👤 Verificando usuário autenticado...");
      const currentUser = await getCurrentUserWithRetry();

      if (!currentUser) {
        setResultado("❌ ERRO: Usuário não está autenticado!");
        return;
      }

      console.log("✅ Usuário autenticado:", currentUser.$id);

      // 2. Verificar se usuário existe na base
      const DATABASE_ID = process.env.NEXT_PUBLIC_APPWRITE_DATABASE_ID!;
      const COLLECTION_ID =
        process.env.NEXT_PUBLIC_APPWRITE_COLLECTION_USUARIOS_ID!;

      console.log("🔍 Buscando usuário na base de dados...");
      console.log("Database ID:", DATABASE_ID);
      console.log("Collection ID:", COLLECTION_ID);
      console.log("Auth ID:", currentUser.$id);

      const usuarios = await databases.listDocuments(
        DATABASE_ID,
        COLLECTION_ID,
        [Query.equal("auth-id-appwrite", currentUser.$id)]
      );

      console.log("📊 Resultado da consulta:", usuarios);

      let mensagem = `🔍 DIAGNÓSTICO COMPLETO\n\n`;
      mensagem += `👤 Usuário autenticado: ${currentUser.$id}\n`;
      mensagem += `📧 Email: ${currentUser.email}\n\n`;

      if (usuarios.documents.length === 0) {
        mensagem += `❌ PROBLEMA IDENTIFICADO!\n`;
        mensagem += `🚨 Usuário NÃO encontrado na base de dados\n\n`;
        mensagem += `💡 POSSÍVEIS CAUSAS:\n`;
        mensagem += `1. Usuário nunca completou o registro\n`;
        mensagem += `2. Problema na criação do usuário\n`;
        mensagem += `3. Auth ID não coincide\n\n`;
        mensagem += `🔧 SOLUÇÃO:\n`;
        mensagem += `Precisa completar o registro primeiro!`;
      } else {
        const usuario = usuarios.documents[0];
        mensagem += `✅ Usuário ENCONTRADO na base!\n`;
        mensagem += `📊 ID do documento: ${usuario.$id}\n`;
        mensagem += `📊 Nome civil: ${usuario["nome-civil"]}\n`;
        mensagem += `📊 CPF: ${usuario.cpf}\n\n`;

        mensagem += `📍 ENDEREÇOS:\n`;
        if (
          usuario.enderecos &&
          Array.isArray(usuario.enderecos) &&
          usuario.enderecos.length > 0
        ) {
          mensagem += `✅ Tem ${usuario.enderecos.length} endereços\n`;
          usuario.enderecos.forEach((end: string, index: number) => {
            mensagem += `  ${index + 1}. ${end}\n`;
          });
        } else {
          mensagem += `❌ SEM ENDEREÇOS (${JSON.stringify(
            usuario.enderecos
          )})\n`;
        }

        mensagem += `\n🏢 EMPRESAS_ARRAY:\n`;
        if (
          usuario.empresas_array &&
          Array.isArray(usuario.empresas_array) &&
          usuario.empresas_array.length > 0
        ) {
          mensagem += `✅ Tem ${usuario.empresas_array.length} empresas\n`;
          usuario.empresas_array.forEach((emp: string, index: number) => {
            mensagem += `  ${index + 1}. ${emp}\n`;
          });
        } else {
          mensagem += `❌ SEM EMPRESAS_ARRAY (${JSON.stringify(
            usuario.empresas_array
          )})\n`;
        }

        mensagem += `\n🏢 EMPRESAS (campo antigo):\n`;
        if (usuario.empresas) {
          mensagem += `⚠️ Campo antigo ainda existe: ${JSON.stringify(
            usuario.empresas
          )}\n`;
        } else {
          mensagem += `✅ Campo antigo não existe\n`;
        }

        const temEnderecos =
          usuario.enderecos &&
          Array.isArray(usuario.enderecos) &&
          usuario.enderecos.length > 0;
        const temEmpresas =
          usuario.empresas_array &&
          Array.isArray(usuario.empresas_array) &&
          usuario.empresas_array.length > 0;

        mensagem += `\n🔍 VALIDAÇÃO FINAL:\n`;
        mensagem += `• Tem endereços: ${temEnderecos ? "✅" : "❌"}\n`;
        mensagem += `• Tem empresas_array: ${temEmpresas ? "✅" : "❌"}\n`;
        mensagem += `• Registro completo: ${
          temEnderecos && temEmpresas ? "✅" : "❌"
        }\n\n`;

        if (temEnderecos && temEmpresas) {
          mensagem += `🎉 REGISTRO ESTÁ COMPLETO!\n`;
          mensagem += `💡 O problema deve estar no useAuthGuard`;
        } else {
          mensagem += `❌ REGISTRO INCOMPLETO!\n`;
          mensagem += `💡 Precisa completar o cadastro`;
        }
      }

      setResultado(mensagem);
    } catch (error: any) {
      console.error("❌ Erro no diagnóstico:", error);
      setResultado(`❌ Erro: ${error.message}`);
    } finally {
      setCarregando(false);
    }
  };

  return (
    <div className="container mx-auto p-8">
      <h1 className="text-3xl font-bold mb-6">🔍 Diagnóstico Completo</h1>

      <div className="bg-red-50 border border-red-200 rounded-lg p-4 mb-6">
        <h2 className="font-semibold text-red-800 mb-2">🚨 Erro atual:</h2>
        <p className="text-red-700">
          "Acesso Restrito: Seu cadastro não foi encontrado em nossa base de
          dados."
        </p>
      </div>

      <div className="bg-blue-50 border border-blue-200 rounded-lg p-4 mb-6">
        <h2 className="font-semibold text-blue-800 mb-2">
          Este diagnóstico vai verificar:
        </h2>
        <ul className="text-blue-700 space-y-1">
          <li>• Se o usuário está autenticado</li>
          <li>• Se o usuário existe na base de dados</li>
          <li>• Se tem endereços e empresas_array</li>
          <li>• Qual é exatamente o problema</li>
        </ul>
      </div>

      <button
        onClick={diagnosticar}
        disabled={carregando}
        className="bg-blue-600 hover:bg-blue-700 text-white px-6 py-3 rounded-lg font-medium disabled:opacity-50"
      >
        {carregando ? "🔄 Diagnosticando..." : "🔍 Executar Diagnóstico"}
      </button>

      {resultado && (
        <div className="mt-6 bg-gray-50 border rounded-lg p-4">
          <h3 className="font-semibold mb-2">Resultado do Diagnóstico:</h3>
          <pre className="whitespace-pre-wrap text-sm">{resultado}</pre>
        </div>
      )}
    </div>
  );
}
