-- MENU NUEVO DE AREPA POWER, PARTE 1 DE 4: BEBIDAS Y JUGOS.
--
-- Fuente: el arte impreso que entrego Gilberto el 2026-07-30 (pagina de
-- "BEBIDAS Y JUGOS"). Los precios del sistema ya incluyen IVA
-- (restaurantes.precios_con_iva = true), asi que los numeros del menu entran
-- tal cual, sin recalcular nada.
--
-- Lo que hace esta migracion:
--   1. Pone los tamaños en los nombres, para que la app diga lo mismo que el
--      menu impreso y el cliente sepa que esta comprando.
--   2. Corrige cuatro precios que bajaron.
--   3. Saca dos bebidas que ya no se venden. El historial NO se pierde:
--      pedido_items guarda nombre y precio congelados en cada pedido, y la
--      llave foranea es SET NULL. Un pedido viejo sigue diciendo que se
--      vendio y en cuanto.
--   4. Abre la categoria "Jugos Naturales" que el menu nuevo separa de las
--      bebidas, y muda el Nestea para alla.
--   5. Deja el orden de la carta igual al del papel.

do $$
declare
  v_rest uuid;
  v_bebidas uuid;
  v_jugos uuid;
begin
  select id into strict v_rest from public.restaurantes where nombre = 'Arepa Power Restaurant';
  select id into strict v_bebidas from public.categorias
   where restaurante_id = v_rest and nombre = 'Bebidas';

  -- ===== 1 y 2. Nombres con tamaño y precios nuevos =====
  -- Se busca por el nombre viejo EXACTO: si alguna ya fue tocada a mano, el
  -- update no encuentra nada y no rompe, en vez de pisar lo que no debe.
  update public.productos set nombre = 'Refresco botella 350ml', precio_usd = 1
   where restaurante_id = v_rest and nombre = 'Refresco Botella';

  update public.productos set nombre = 'Refresco lata 355ml', precio_usd = 2.50
   where restaurante_id = v_rest and nombre = 'Refresco lata';

  -- Bajo de 2 a 1,50.
  update public.productos set nombre = 'Refresco litro', precio_usd = 1.50
   where restaurante_id = v_rest and nombre = 'Refresco Litro';

  update public.productos set nombre = 'Refresco 1.5 litros', precio_usd = 3
   where restaurante_id = v_rest and nombre = 'Refresco 1.5';

  update public.productos set nombre = 'Agua 250ml', precio_usd = 1
   where restaurante_id = v_rest and nombre = 'Agua pequeña';

  update public.productos set nombre = 'Agua 1.5 lt', precio_usd = 2
   where restaurante_id = v_rest and nombre = 'Agua';

  -- Bajo de 2,50 a 1: queda igual que la retornable.
  update public.productos set precio_usd = 1
   where restaurante_id = v_rest and nombre = 'Maltín botella desechable';

  update public.productos set nombre = 'Soda de lata', precio_usd = 2
   where restaurante_id = v_rest and nombre = 'Soda';

  -- Estaba escrita "Panela". Es papelon, y bajo de 3 a 2.
  update public.productos set nombre = 'Papelón con limón', precio_usd = 2,
         descripcion = 'Papelón con limón bien frío.'
   where restaurante_id = v_rest and nombre = 'Panela con limón';

  -- ===== 3. Las que salen del menu =====
  delete from public.productos
   where restaurante_id = v_rest and nombre in ('Agua Minalba', 'Yukery 1.5');

  -- ===== 4. Jugos naturales, categoria propia =====
  -- El menu nuevo los separa de los refrescos, asi que la carta de la app lo
  -- refleja. Va pegada a Bebidas, y las categorias que venian despues corren
  -- un puesto para hacerle sitio.
  if not exists (select 1 from public.categorias
                  where restaurante_id = v_rest and nombre = 'Jugos Naturales') then
    update public.categorias set orden = orden + 1
     where restaurante_id = v_rest and orden > (select orden from public.categorias where id = v_bebidas);

    insert into public.categorias (restaurante_id, nombre, orden, grupo, a_cocina)
    select v_rest, 'Jugos Naturales', c.orden + 1, 'bebida', false
      from public.categorias c where c.id = v_bebidas;
  end if;

  select id into strict v_jugos from public.categorias
   where restaurante_id = v_rest and nombre = 'Jugos Naturales';

  -- El Nestea se muda con los jugos y baja de 3 a 2.
  update public.productos set categoria_id = v_jugos, precio_usd = 2
   where restaurante_id = v_rest and nombre = 'Nestea';

  -- ===== 5. Los que entran nuevos =====
  insert into public.productos (restaurante_id, categoria_id, nombre, descripcion, precio_usd, disponible, orden)
  select v_rest, x.cat, x.nombre, x.descripcion, x.precio, true, x.orden
    from (values
      (v_bebidas, 'Speed Max 200ml', 'Bebida energética de 200 ml.', 1.50::numeric, 10),
      (v_jugos,   'Fresa',           'Jugo natural de fresa.',       2::numeric,     1),
      (v_jugos,   'Parchita',        'Jugo natural de parchita.',    2::numeric,     2),
      (v_jugos,   'Mora',            'Jugo natural de mora.',        2::numeric,     3)
    ) as x(cat, nombre, descripcion, precio, orden)
   where not exists (select 1 from public.productos p
                      where p.restaurante_id = v_rest and p.nombre = x.nombre);

  -- ===== 6. El orden del papel =====
  -- Antes todas estaban en orden 0 y salian alfabeticas. Ahora la app las
  -- muestra como estan en el menu de la pared.
  update public.productos p set orden = o.puesto
    from (values
      ('Refresco botella 350ml', 1), ('Refresco lata 355ml', 2), ('Refresco litro', 3),
      ('Refresco 1.5 litros', 4), ('Yuky pack', 5), ('Agua 250ml', 6), ('Agua 1.5 lt', 7),
      ('Maltín botella retornable', 8), ('Maltín botella desechable', 9),
      ('Speed Max 200ml', 10), ('Soda de lata', 11), ('Papelón con limón', 12)
    ) as o(nombre, puesto)
   where p.restaurante_id = v_rest and p.categoria_id = v_bebidas and p.nombre = o.nombre;

  update public.productos set orden = 4
   where restaurante_id = v_rest and categoria_id = v_jugos and nombre = 'Nestea';
end $$;
