-- Sala de espera (pantalla para TV): cola de pedidos de MESA en preparación,
-- por orden de llegada. Pública (anon), solo datos seguros (mesa, no nombre).
alter table public.restaurantes
  add column if not exists sala_promedio_min int not null default 10;

create or replace function public.sala_espera(p_slug text)
returns jsonb
language sql stable security definer set search_path to 'public'
as $$
  select jsonb_build_object(
    'restaurante', (
      select jsonb_build_object(
        'nombre', r.nombre, 'logo_url', r.logo_url, 'portada_url', r.portada_url,
        'color', r.color_primario, 'promedio_min', r.sala_promedio_min, 'abierto', r.abierto
      )
      from public.restaurantes r
      where r.slug = p_slug and r.activo and r.publicado
    ),
    'cola', coalesce((
      select jsonb_agg(
               jsonb_build_object(
                 'mesa', p.mesa,
                 'codigo', p.codigo,
                 'estado', p.estado,
                 'items', coalesce((
                   select jsonb_agg(jsonb_build_object('cantidad', it.cantidad, 'nombre', it.nombre) order by it.id)
                   from public.pedido_items it where it.pedido_id = p.id
                 ), '[]'::jsonb)
               ) order by p.recibido_en
             )
      from public.pedidos p
      join public.restaurantes r on r.id = p.restaurante_id
      where r.slug = p_slug
        and p.tipo_entrega = 'mesa'
        and p.estado in ('confirmado', 'preparando')
    ), '[]'::jsonb)
  );
$$;
grant execute on function public.sala_espera(text) to anon, authenticated;
