import axios from "axios";

const SUPABASE_URL = "https://yuanqfswhberkoevtmfr.supabase.co";
const ANON_KEY =
  "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl1YW5xZnN3aGJlcmtvZXZ0bWZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ5NTQzNjksImV4cCI6MjA3MDUzMDM2OX0.g8Fm4XAvtX46zifBZnYVH4tVuQkqUH6Ia9CXQj4DztQ";

let ACCESS_TOKEN = "";

// 1. Login como admin
async function login() {
  console.log("\n🔐 Fazendo login como admin...");
  try {
    const response = await axios.post(
      `${SUPABASE_URL}/auth/v1/token?grant_type=password`,
      {
        email: "riseup@popcode.com.br",
        password: "riseup",
      },
      {
        headers: {
          "Content-Type": "application/json",
          apikey: ANON_KEY,
        },
      }
    );

    ACCESS_TOKEN = response.data.access_token;
    console.log("✅ Login realizado com sucesso!");
    console.log(`📧 Email: ${response.data.user.email}`);
    console.log(`🆔 User ID: ${response.data.user.id}`);
    return response.data;
  } catch (error) {
    console.error("❌ Erro no login:", error.response?.data || error.message);
    process.exit(1);
  }
}

// 2. Listar usuários
async function listUsers() {
  console.log("\n📋 Listando usuários...\n");
  try {
    const response = await axios.get(
      `${SUPABASE_URL}/rest/v1/profiles?select=id,full_name,email`,
      {
        headers: {
          apikey: ANON_KEY,
          Authorization: `Bearer ${ACCESS_TOKEN}`,
        },
      }
    );

    console.log(`✅ ${response.data.length} usuários encontrados:\n`);

    response.data.forEach((user, index) => {
      console.log(`${index + 1}. ${user.full_name || "Sem nome"}`);
      console.log(`   📧 Email: ${user.email}`);
      console.log(`   🆔 ID: ${user.id}\n`);
    });

    return response.data;
  } catch (error) {
    console.error(
      "❌ Erro ao listar usuários:",
      error.response?.data || error.message
    );
    return [];
  }
}

// 3. Deletar usuário
async function deleteUser(userId, userName) {
  console.log(`\n🗑️  Deletando usuário: ${userName} (${userId})...`);
  try {
    const response = await axios.post(
      `${SUPABASE_URL}/functions/v1/delete-user`,
      { userId },
      {
        headers: {
          "Content-Type": "application/json",
          apikey: ANON_KEY,
          Authorization: `Bearer ${ACCESS_TOKEN}`,
        },
      }
    );

    console.log(`✅ ${userName} deletado com sucesso!`);
    return response.data;
  } catch (error) {
    console.error(
      `❌ Erro ao deletar ${userName}:`,
      error.response?.data || error.message
    );
  }
}

// Script principal
async function main() {
  console.log("🧹 Iniciando limpeza de usuários de teste...");

  // 1. Login
  await login();

  // 2. Listar usuários atuais
  const users = await listUsers();

  // 3. Lista de emails para deletar (apenas os que o assistente criou)
  const testEmails = [
    "admin@mediconnect.com",
    "secretaria@mediconnect.com",
    "dr.medico@mediconnect.com",
    "fernando.pirichowski@souunit.com.br",
  ];

  // 4. Deletar usuários de teste
  let deletedCount = 0;
  for (const user of users) {
    if (testEmails.includes(user.email)) {
      await deleteUser(user.id, user.full_name || user.email);
      deletedCount++;
      // Aguardar 1 segundo entre deleções
      await new Promise((resolve) => setTimeout(resolve, 1000));
    }
  }

  console.log(
    `\n✅ Limpeza concluída! ${deletedCount} usuários de teste deletados.`
  );

  // 5. Listar usuários finais
  console.log("\n📊 Usuários restantes:");
  await listUsers();
}

main().catch(console.error);
