-- EL TICKET DEL CLIENTE MUESTRA EL DESGLOSE (2026-07-28)
-- Todo documento con montos debe dejar claro cuanto es base y cuanto impuesto
-- (y seguir diciendo que NO es factura, que ya lo dice AvisoNoFiscal). Se dropea
-- porque cambia el RETURNS TABLE.
begin;

drop function if exists public.pedido_ticket(uuid);

create or replace function public.pedido_ticket(p_pedido_id uuid)
returns table(
  codigo text,
  estado text,
  tipo_entrega text,
  mesa text,
  cliente_nombre text,
  cliente_telefono text,
  cliente_cedula text,
  total_usd numeric,
  tasa_bs numeric,
  pago_estado text,
  metodo_pago text,
  restaurante_nombre text,
  restaurante_color text,
  items jsonb,
  base_imponible_usd numeric,
  iva_usd numeric,
  iva_alicuota numeric,
  restaurante_rif text,
  restaurante_razon_social text
)
language sql
stable
security definer
set search_path to 'public'
as $fn$
  select p.codigo, p.estado, p.tipo_entrega, p.mesa,
         p.cliente_nombre, p.cliente_telefono, p.cliente_cedula,
         p.total_usd, p.tasa_bs, pg.estado, p.metodo_pago,
         r.nombre, r.color_primario,
         coalesce(
           (select jsonb_agg(jsonb_build_object(
                     'nombre', it.nombre, 'cantidad', it.cantidad,
                     'precio_usd', it.precio_usd, 'nota', it.nota))
              from public.pedido_items it where it.pedido_id = p.id),
           '[]'::jsonb),
         p.base_imponible_usd, p.iva_usd, p.iva_alicuota,
         r.rif, r.razon_social
    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;
$fn$;

grant execute on function public.pedido_ticket(uuid) to anon, authenticated, service_role;

commit;
