// Edge Function: actualizar-tasa
// Trae la tasa oficial del BCV y la aplica (tasa global + restaurantes automaticos).
// Protegida por un secreto (la llama el cron cada pocas horas).
const CORS = {
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Headers': 'authorization, x-cron-secret, content-type',
  'Access-Control-Allow-Methods': 'POST, OPTIONS',
};
function json(obj: unknown, status = 200) {
  return new Response(JSON.stringify(obj), { status, headers: { ...CORS, 'Content-Type': 'application/json' } });
}

Deno.serve(async (req) => {
  if (req.method === 'OPTIONS') return new Response('ok', { headers: CORS });
  try {
    const secret = req.headers.get('x-cron-secret');
    if (!secret || secret !== Deno.env.get('CRON_SECRET')) {
      return json({ error: 'No autorizado' }, 401);
    }

    // 1) Traer la tasa oficial BCV
    const r = await fetch('https://ve.dolarapi.com/v1/dolares/oficial');
    if (!r.ok) return json({ error: 'No se pudo obtener la tasa del BCV' }, 502);
    const j = await r.json();
    const tasa = Number(j?.promedio ?? j?.venta ?? j?.compra);
    if (!tasa || tasa <= 0) return json({ error: 'Tasa invalida', detalle: JSON.stringify(j).slice(0, 200) }, 502);

    // 2) Aplicarla via RPC (service role, interno)
    const SUPABASE_URL = Deno.env.get('SUPABASE_URL')!;
    const SERVICE = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
    const ap = await fetch(`${SUPABASE_URL}/rest/v1/rpc/aplicar_tasa_automatica`, {
      method: 'POST',
      headers: { apikey: SERVICE, Authorization: `Bearer ${SERVICE}`, 'Content-Type': 'application/json' },
      body: JSON.stringify({ p_tasa: tasa, p_fuente: 'BCV' }),
    });
    if (!ap.ok) {
      const t = await ap.text();
      return json({ error: 'No se pudo aplicar la tasa', detalle: t.slice(0, 200) }, 500);
    }
    return json({ ok: true, tasa, fecha: j?.fechaActualizacion ?? null });
  } catch (e) {
    return json({ error: 'Error inesperado', detalle: String(e) }, 500);
  }
});
