// Edge Function: apaga TODA a conta do utilizador autenticado — linhas em
// `children`/`profiles` e o próprio registo em `auth.users`. Isto é o que
// falta para permitir criar uma nova conta com o mesmo e-mail depois de
// "Apagar dados da conta": o app (client) nunca teve a service role key para
// poder chamar `auth.admin.deleteUser`, por isso essa etapa faltava e o
// e-mail continuava "ocupado" no Supabase Auth.
//
// Deploy (uma vez, com a Supabase CLI já autenticada):
//   supabase functions deploy delete-account --project-ref mannjismlhlwaqqqnvog
//
// SUPABASE_URL e SUPABASE_SERVICE_ROLE_KEY já ficam disponíveis
// automaticamente dentro de toda Edge Function — não é preciso configurar
// nenhum secret manualmente.

import { createClient } from 'https://esm.sh/@supabase/supabase-js@2';

const SUPABASE_URL = Deno.env.get('SUPABASE_URL')!;
const SERVICE_ROLE_KEY = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;

Deno.serve(async (req) => {
  if (req.method !== 'POST') {
    return new Response(JSON.stringify({ error: 'Method not allowed' }), {
      status: 405,
      headers: { 'Content-Type': 'application/json' },
    });
  }

  const authHeader = req.headers.get('Authorization') ?? '';
  const jwt = authHeader.replace('Bearer ', '').trim();
  if (!jwt) {
    return new Response(JSON.stringify({ error: 'Sessão em falta' }), {
      status: 401,
      headers: { 'Content-Type': 'application/json' },
    });
  }

  const admin = createClient(SUPABASE_URL, SERVICE_ROLE_KEY);

  // Valida o JWT do chamador e identifica o uid — nunca confiar num uid vindo
  // do corpo do pedido, sob pena de qualquer pessoa poder apagar outra conta.
  const { data: userData, error: userError } = await admin.auth.getUser(jwt);
  if (userError || !userData?.user) {
    return new Response(JSON.stringify({ error: 'Sessão inválida' }), {
      status: 401,
      headers: { 'Content-Type': 'application/json' },
    });
  }
  const uid = userData.user.id;

  await admin.from('children').delete().eq('owner_id', uid);
  await admin.from('profiles').delete().eq('id', uid);

  const { error: deleteUserError } = await admin.auth.admin.deleteUser(uid);
  if (deleteUserError) {
    return new Response(JSON.stringify({ error: deleteUserError.message }), {
      status: 500,
      headers: { 'Content-Type': 'application/json' },
    });
  }

  return new Response(JSON.stringify({ ok: true }), {
    status: 200,
    headers: { 'Content-Type': 'application/json' },
  });
});
