-- SACAR ALGO DEL MENU NO ES LO MISMO QUE QUE SE HAYA ACABADO HOY.
--
-- El sistema solo tenia `disponible`, y se estaba usando para las dos cosas.
-- No son la misma:
--   - `disponible = false` es "hoy se acabo". El cliente SI lo ve, atenuado,
--     porque le sirve saber que el negocio lo tiene aunque hoy no haya.
--   - Sacar de la carta es "esto ya no se vende". El cliente NO tiene por que
--     verlo.
--
-- Al remodelar el menu de Arepa Power (2026-07-31) se apagaron seis productos
-- creyendo que con eso salian de la carta, y no salieron: la tienda los siguio
-- mostrando en gris. Gilberto lo vio de una: "no veo cambios en la pagina de
-- las arepas".
--
-- Ademas, esta columna tapa un hueco mas serio. Hoy la unica forma que tiene
-- el dueño de quitar algo del menu es el boton de eliminar del panel, que hace
-- un DELETE de verdad. Y `recetas_productos` borra en CASCADE: el dia que
-- alguien elimine la Arepa desde el panel, se lleva por delante las 55 recetas
-- del cerebro de costos sin decir una palabra. Con `archivado`, sacar del menu
-- deja de destruir nada y se puede deshacer.

alter table public.productos
  add column if not exists archivado boolean not null default false;

comment on column public.productos.archivado is
  'El producto salio de la carta: el cliente no lo ve. Distinto de disponible=false, que es "hoy se acabo" y si se muestra atenuado. Se archiva en vez de borrar para no perder el enlace con los pedidos ya vendidos ni las recetas de costos.';

-- Que la tienda pueda pedir "los que estan en carta" sin recorrer todo.
create index if not exists productos_en_carta
  on public.productos (restaurante_id, categoria_id)
  where not archivado;

do $$
declare
  v_rest uuid;
begin
  select id into strict v_rest from public.restaurantes where nombre = 'Arepa Power Restaurant';

  -- Los seis que el arte nuevo ya no muestra.
  update public.productos p
     set archivado = true
    from public.categorias c
   where c.id = p.categoria_id
     and p.restaurante_id = v_rest
     and (p.nombre in ('Arepa Sencilla', 'Arepa de Pernil', 'Arepa de Mariscos')
          or c.nombre in ('Pollo Asado', 'Punta de cerdo', 'Chicharrón'));

  -- Y se les devuelve el `disponible` que tenian ANTES de que se usara como
  -- sustituto de archivar. Si algun dia vuelven a la carta, tienen que volver
  -- diciendo la verdad de si habia o no habia. La Punta de Cerdo se queda
  -- apagada porque ya lo estaba por su cuenta (le faltan los precios).
  update public.productos p
     set disponible = true
    from public.categorias c
   where c.id = p.categoria_id
     and p.restaurante_id = v_rest
     and p.archivado
     and c.nombre <> 'Punta de cerdo';
end $$;
