import axios from "axios";

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

// Credenciais do admin
const ADMIN_EMAIL = "riseup@popcode.com.br";
const ADMIN_PASSWORD = "riseup";

let ACCESS_TOKEN = "";

// 1. Fazer 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: ADMIN_EMAIL,
        password: ADMIN_PASSWORD,
      },
      {
        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 todos os usuários (via profiles - simplificado)
async function listUsers() {
  console.log("\n📋 Listando usuários...");
  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(`\n✅ ${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 || "Sem email"}`);
      console.log(`   🆔 ID: ${user.id}`);
      console.log("");
    });

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

// 3. Deletar usuário (Edge Function)
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
    );
  }
}

// 4. Criar novo usuário com Edge Function
async function createUserWithPassword(email, password, fullName, role) {
  console.log(`\n➕ Criando usuário: ${fullName} (${role})...`);
  try {
    const response = await axios.post(
      `${SUPABASE_URL}/functions/v1/create-user`,
      {
        email,
        password,
        full_name: fullName,
        role,
      },
      {
        headers: {
          "Content-Type": "application/json",
          apikey: ANON_KEY,
          Authorization: `Bearer ${ACCESS_TOKEN}`,
        },
      }
    );

    console.log(`✅ ${fullName} criado com sucesso!`);
    console.log(`   📧 Email: ${email}`);
    console.log(`   🔑 Senha: ${password}`);
    console.log(`   👤 Role: ${role}`);
    return response.data;
  } catch (error) {
    console.error(
      `❌ Erro ao criar ${fullName}:`,
      error.response?.data || error.message
    );
  }
}

// 5. Criar médico com Edge Function
async function createDoctor(
  email,
  password,
  fullName,
  especialidade,
  crm,
  crmUf,
  cpf
) {
  console.log(`\n➕ Criando médico: ${fullName}...`);
  try {
    const response = await axios.post(
      `${SUPABASE_URL}/functions/v1/create-doctor`,
      {
        email,
        password,
        full_name: fullName,
        cpf,
        especialidade,
        crm,
        crm_uf: crmUf,
      },
      {
        headers: {
          "Content-Type": "application/json",
          apikey: ANON_KEY,
          Authorization: `Bearer ${ACCESS_TOKEN}`,
        },
      }
    );

    console.log(`✅ ${fullName} criado com sucesso!`);
    console.log(`   📧 Email: ${email}`);
    console.log(`   🔑 Senha: ${password}`);
    console.log(`   🆔 CPF: ${cpf}`);
    console.log(`   🩺 Especialidade: ${especialidade}`);
    console.log(`   📋 CRM: ${crm}-${crmUf}`);
    return response.data;
  } catch (error) {
    console.error(
      `❌ Erro ao criar ${fullName}:`,
      error.response?.data || error.message
    );
  }
}

// Script principal
async function main() {
  console.log("🚀 Iniciando gerenciamento de usuários...");

  // 1. Login
  await login();

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

  // 3. Encontrar e deletar admin e médico específicos (por email)
  const adminToDelete = users.find((u) => u.email === "admin@mediconnect.com");

  const secretariaToDelete = users.find(
    (u) => u.email === "secretaria@mediconnect.com"
  );

  const medicoToDelete = users.find(
    (u) =>
      u.email === "medico@mediconnect.com" ||
      u.email === "dr.medico@mediconnect.com"
  );

  if (adminToDelete) {
    await deleteUser(
      adminToDelete.id,
      adminToDelete.full_name || adminToDelete.email
    );
  } else {
    console.log("\n⚠️  Nenhum admin adicional encontrado para deletar");
  }

  if (secretariaToDelete) {
    await deleteUser(
      secretariaToDelete.id,
      secretariaToDelete.full_name || secretariaToDelete.email
    );
  } else {
    console.log("\n⚠️  Nenhuma secretária encontrada para deletar");
  }

  if (medicoToDelete) {
    await deleteUser(
      medicoToDelete.id,
      medicoToDelete.full_name || medicoToDelete.email
    );
  } else {
    console.log("\n⚠️  Nenhum médico encontrado para deletar");
  }

  // 4. Aguardar um pouco
  console.log("\n⏳ Aguardando 2 segundos...");
  await new Promise((resolve) => setTimeout(resolve, 2000));

  // 5. Criar novos usuários
  await createUserWithPassword(
    "admin@mediconnect.com",
    "admin123",
    "Administrador Sistema",
    "admin"
  );

  await createUserWithPassword(
    "secretaria@mediconnect.com",
    "secretaria123",
    "Secretária Sistema",
    "secretaria"
  );

  await createDoctor(
    "dr.medico@mediconnect.com",
    "medico123",
    "Dr. João Silva",
    "Cardiologia",
    "12345",
    "SP",
    "12345678900"
  );

  // 6. Listar usuários finais
  console.log("\n📊 Estado final dos usuários:");
  await listUsers();

  console.log("\n✅ Processo concluído!");
  console.log("\n📝 Credenciais dos novos usuários:");
  console.log("   👨‍💼 Admin: admin@mediconnect.com / admin123");
  console.log("   �‍💼 Secretária: secretaria@mediconnect.com / secretaria123");
  console.log("   �👨‍⚕️  Médico: dr.medico@mediconnect.com / medico123");
  console.log("   🆔 CPF: 12345678900");
  console.log("   🩺 Especialidade: Cardiologia");
  console.log("   📋 CRM: 12345-SP");
}

// Executar
main().catch(console.error);
