-- La limpieza de la medicion se engancha al cron que YA existe
-- (limpiar-datos-viejos, 4:30am hora de Venezuela), en vez de crear otro
-- trabajo aparte: un solo sitio donde se recoge la basura vieja.
--
-- Auditoria 2026-07-30, cierre del hallazgo 1: la tabla de medicion no se
-- limpiaba nunca y podia crecer para siempre.

create or replace function public.fn_limpiar_datos_viejos(p_dias integer default 90)
returns jsonb
language plpgsql
security definer
set search_path to 'public'
as $function$
declare
  v_corte timestamptz := now() - make_interval(days => greatest(p_dias, 30));
  v_pedidos integer;
  v_pagos integer;
  v_pagos_mesa integer;
  v_medicion integer;
begin
  update public.pedidos
     set cliente_nombre     = 'Cliente',
         cliente_telefono   = '',
         cliente_cedula     = null,
         direccion          = null,
         direccion_latitud  = null,
         direccion_longitud = null,
         nota               = null,
         push_endpoint      = null,
         push_p256dh        = null,
         push_auth          = null
   where recibido_en < v_corte
     and (cliente_telefono <> '' or push_endpoint is not null);
  get diagnostics v_pedidos = row_count;

  update public.pagos p
     set referencia = null, comprobante_url = null
   where p.creado_en < v_corte
     and (p.referencia is not null or p.comprobante_url is not null);
  get diagnostics v_pagos = row_count;

  update public.pagos_mesa
     set referencia = null, comprobante_url = null
   where creado_en < v_corte
     and (referencia is not null or comprobante_url is not null);
  get diagnostics v_pagos_mesa = row_count;

  -- La medicion propia tambien caduca a los 90 dias.
  v_medicion := public.fn_limpiar_medicion_vieja();

  return jsonb_build_object('pedidos', v_pedidos, 'pagos', v_pagos,
                            'pagos_mesa', v_pagos_mesa, 'medicion', v_medicion);
end;
$function$;
