import { createClient } from '@supabase/supabase-js';
const URL = process.env.VITE_SUPABASE_URL || 'http://127.0.0.1:54321';
const ANON =
  process.env.VITE_SUPABASE_ANON_KEY || process.env.SUPABASE_ANON_KEY || '';
let fallos = 0;
const check = (c, m) => {
  console.log((c ? '  OK  ' : '  XX  ') + m);
  if (!c) fallos++;
};
const anon = createClient(URL, ANON, { auth: { persistSession: false } });

// tasa antes
const { data: t0 } = await anon.from('tasa_cambio').select('*').eq('id', 1).maybeSingle();
console.log('  ..  tasa antes:', t0?.tasa_bs, t0?.fuente);

// sin secreto -> 401
const rNo = await fetch(`${URL}/functions/v1/actualizar-tasa`, { method: 'POST' }).catch(() => null);
// llamar la EF con secreto (reintenta por arranque en frio)
let jr = null;
for (let i = 0; i < 20; i++) {
  try {
    const r = await fetch(`${URL}/functions/v1/actualizar-tasa`, {
      method: 'POST',
      headers: { 'x-cron-secret': 'gustito-express-cron-2026', 'Content-Type': 'application/json' },
    });
    jr = { status: r.status, body: await r.json() };
    break;
  } catch {
    await new Promise((res) => setTimeout(res, 2000));
  }
}
check(rNo ? rNo.status === 401 : true, 'Sin secreto rechaza (401)');
check(jr?.status === 200 && jr.body?.ok, 'EF aplica la tasa BCV ' + JSON.stringify(jr?.body));

// tasa despues
const { data: t1 } = await anon.from('tasa_cambio').select('*').eq('id', 1).maybeSingle();
check(Number(t1?.tasa_bs) > 0, 'Tasa global guardada: Bs ' + t1?.tasa_bs + ' (' + t1?.fuente + ')');

// restaurante automatico sigue la tasa
const { data: rest } = await anon
  .from('restaurantes')
  .select('slug,tasa_bs,tasa_automatica')
  .eq('slug', 'la-esquina')
  .maybeSingle();
check(
  rest?.tasa_automatica && Number(rest?.tasa_bs) === Number(t1?.tasa_bs),
  'Restaurante automatico sigue la tasa: Bs ' + rest?.tasa_bs,
);

console.log('\n' + (fallos === 0 ? 'TASA OK' : `${fallos} FALLO(S)`));
process.exit(fallos === 0 ? 0 : 1);
