-- Candado anti doble-cobro: para cualquier producto con un grupo "Cantidad c/u",
-- el precio del plato (base) se fuerza a 0. El precio vive en cada opcion (precio final).
-- Asi da igual como el dueno cargue los precios: nunca se duplica base + opcion.
create or replace function public.tg_producto_base_cero()
returns trigger
language plpgsql
set search_path to 'public'
as $$
begin
  if new.opciones is not null and exists (
    select 1 from jsonb_array_elements(new.opciones) g where g->>'tipo' = 'cantidad'
  ) then
    new.precio_usd := 0;
  end if;
  return new;
end;
$$;

drop trigger if exists trg_producto_base_cero on public.productos;
create trigger trg_producto_base_cero
before insert or update on public.productos
for each row execute function public.tg_producto_base_cero();
