-- ============================================================
-- 081_notificacoes_e_lembretes.sql — o painel avisa; nada sai sozinho
-- ============================================================
-- Duas tabelas, dois problemas diferentes:
--
-- 1. platform_notifications — hoje o ÚNICO aviso da plataforma é e-mail, que
--    depende de SMTP externo configurado. Quando o SMTP falha (ou nunca foi
--    configurado), o formulário chega e ninguém fica sabendo. A notificação
--    in-app não depende de nada de fora: nasce no banco, aparece no sino.
--
-- 2. onboarding_nudges — o motor detecta a parada (formulário abandonado,
--    canal pronto sem conectar, cartão faltando) e PREPARA o lembrete. Quem
--    envia é o dono, do próprio aparelho, pelo botão wa.me.
--
--    ⚠ DECISÃO DO DONO (12/08/2026): lembrete NÃO sai por WhatsApp por
--    enquanto. O caminho existe no código (server/waHouse.ts) e é testado,
--    mas nasce desligado pela config `onboarding_engine.nudges.canalWhats`.
--    O UNIQUE(request_id, tipo) é o que impede o mesmo lembrete de nascer
--    duas vezes quando o worker roda de novo — e continua valendo no dia em
--    que o envio for automático.
-- ============================================================

CREATE TABLE IF NOT EXISTS platform_notifications (
  id          varchar PRIMARY KEY DEFAULT gen_random_uuid(),
  -- Destinatário. Uma linha POR pessoa: "lida" é estado de cada um, não do aviso.
  user_id     varchar NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  tipo        varchar(40) NOT NULL,
  titulo      varchar(200) NOT NULL,
  corpo       text,
  -- Para onde o clique leva (ex.: /leads?aba=onboarding).
  link        varchar(300),
  -- Agrupa avisos do mesmo assunto para não repetir (ex.: request:<id>).
  chave       varchar(120),
  read_at     timestamptz,
  created_at  timestamptz NOT NULL DEFAULT now()
);

-- A consulta quente é sempre "meus avisos não lidos, mais novos primeiro".
CREATE INDEX IF NOT EXISTS idx_platform_notifications_user
  ON platform_notifications (user_id, read_at, created_at DESC);

-- Evita o mesmo aviso repetido para a mesma pessoa (o worker roda a cada 10min).
CREATE UNIQUE INDEX IF NOT EXISTS idx_platform_notifications_dedupe
  ON platform_notifications (user_id, chave)
  WHERE chave IS NOT NULL;

CREATE TABLE IF NOT EXISTS onboarding_nudges (
  id            varchar PRIMARY KEY DEFAULT gen_random_uuid(),
  request_id    varchar NOT NULL REFERENCES onboarding_requests(id) ON DELETE CASCADE,
  tipo          varchar(40) NOT NULL,
  -- draft = preparado, esperando o dono mandar; sent = enviado; skipped = não
  -- fazia mais sentido (o cliente resolveu antes).
  status        varchar(20) NOT NULL DEFAULT 'draft',
  destino       varchar(25),
  canal         varchar(20) NOT NULL DEFAULT 'wa_me',
  template_name varchar(80),
  texto         text NOT NULL,
  wamid         varchar(120),
  motivo_skip   varchar(200),
  sent_at       timestamptz,
  created_at    timestamptz NOT NULL DEFAULT now(),
  CONSTRAINT onboarding_nudges_uniq UNIQUE (request_id, tipo)
);

CREATE INDEX IF NOT EXISTS idx_onboarding_nudges_status
  ON onboarding_nudges (status, created_at DESC);
