-- ============================================================
-- Gustito Express — Pago del comensal: ver datos de pago + subir comprobante.
-- El comensal es anon; accede solo por el id (uuid) de su pedido.
-- ============================================================

-- Datos del pago que el comensal necesita: metodo, estado y los datos de la
-- cuenta del restaurante para ESE metodo (banco/cedula/telefono, zelle, etc.).
create or replace function public.pedido_datos_pago(p_pedido_id uuid)
returns table (
  pago_id       uuid,
  metodo_pago   text,
  pago_estado   text,
  total_usd     numeric,
  tasa_bs       numeric,
  datos_pago    jsonb,
  telefono_rest text
)
language sql stable security definer set search_path = public
as $$
  select pg.id, p.metodo_pago, pg.estado, p.total_usd, p.tasa_bs,
         (r.metodos_pago -> p.metodo_pago), r.telefono
  from public.pedidos p
  join public.restaurantes r on r.id = p.restaurante_id
  left join public.pagos pg on pg.pedido_id = p.id
  where p.id = p_pedido_id
  limit 1;
$$;
grant execute on function public.pedido_datos_pago(uuid) to anon, authenticated;

-- El comensal registra su referencia y/o comprobante -> el pago queda "verificando".
create or replace function public.registrar_comprobante(
  p_pedido_id uuid,
  p_referencia text,
  p_comprobante_url text
) returns void language plpgsql security definer set search_path = public
as $$
begin
  update public.pagos
     set referencia      = coalesce(nullif(p_referencia, ''), referencia),
         comprobante_url = coalesce(nullif(p_comprobante_url, ''), comprobante_url),
         estado          = 'verificando'
   where pedido_id = p_pedido_id
     and estado in ('pendiente', 'verificando', 'rechazado');
end;
$$;
grant execute on function public.registrar_comprobante(uuid, text, text) to anon, authenticated;
