-- Config del Cerebrito en la NUBE (pedido de Gilberto 2026-07-24): que la
-- configuracion de impresion (mapeo impresora->puesto, despacho, sinPuesto, pin)
-- se guarde por negocio y BAJE sola en cualquier laptop que inicie sesion. Asi una
-- laptop nueva es: instalar driver + iniciar sesion + confirmar. NO guarda
-- credenciales (correo/clave/token viven solo en la laptop).
--
-- Aplicar por Management API (scripts/_mapi.mjs), NO db push.

CREATE TABLE IF NOT EXISTS public.cerebrito_config_nube (
  restaurante_id uuid PRIMARY KEY REFERENCES public.restaurantes(id) ON DELETE CASCADE,
  config jsonb NOT NULL DEFAULT '{}'::jsonb,
  actualizado_en timestamptz NOT NULL DEFAULT now()
);

ALTER TABLE public.cerebrito_config_nube ENABLE ROW LEVEL SECURITY;

-- Lee cualquier staff del restaurante (el Cerebrito entra con dueno/encargado).
DROP POLICY IF EXISTS cerebrito_config_select ON public.cerebrito_config_nube;
CREATE POLICY cerebrito_config_select ON public.cerebrito_config_nube
  FOR SELECT
  USING (public.fn_es_staff_de(restaurante_id) OR public.fn_es_admin());

-- Escriben dueno o encargado (montan las laptops), o el admin global.
DROP POLICY IF EXISTS cerebrito_config_write ON public.cerebrito_config_nube;
CREATE POLICY cerebrito_config_write ON public.cerebrito_config_nube
  FOR ALL
  USING (
    EXISTS (
      SELECT 1 FROM public.perfiles p
      WHERE p.id = auth.uid()
        AND p.restaurante_id = cerebrito_config_nube.restaurante_id
        AND p.rol IN ('dueno', 'encargado')
    ) OR public.fn_es_admin()
  )
  WITH CHECK (
    EXISTS (
      SELECT 1 FROM public.perfiles p
      WHERE p.id = auth.uid()
        AND p.restaurante_id = cerebrito_config_nube.restaurante_id
        AND p.rol IN ('dueno', 'encargado')
    ) OR public.fn_es_admin()
  );

GRANT SELECT, INSERT, UPDATE, DELETE ON public.cerebrito_config_nube TO authenticated;
