-- Task #336: Usina Multi-BM — tabela de mensagens de disparo Multi-BM.
-- Registro por contato dos disparos WhatsApp Oficial roteados entre as BMs do
-- cliente (isolado da integração wa_oficial existente). O status segue o
-- vocabulário do WhatsApp/Infobip (PENDING/SENT → DELIVERED / SEEN / FAILED) e é
-- atualizado via webhook de entrega. Usado para contagem de limite diário por
-- sender, finalização de campanha e auditoria.
--
-- IDEMPOTENTE: usa IF NOT EXISTS em CREATE TABLE e nos índices.

CREATE TABLE IF NOT EXISTS multibm_messages (
  id                  VARCHAR         PRIMARY KEY DEFAULT gen_random_uuid(),
  service_id          VARCHAR         NOT NULL REFERENCES services(id) ON DELETE CASCADE,
  campaign_id         VARCHAR         REFERENCES campaigns(id),
  bm_id               VARCHAR         REFERENCES business_managers(id) ON DELETE SET NULL,
  sender_id           VARCHAR         REFERENCES bm_senders(id) ON DELETE SET NULL,
  infobip_message_id  VARCHAR,
  phone               VARCHAR         NOT NULL,
  template_id         VARCHAR         REFERENCES multibm_templates(id),
  template_name       VARCHAR,
  status              VARCHAR(20)     NOT NULL DEFAULT 'PENDING',
  error_message       TEXT,
  sent_at             TIMESTAMPTZ     DEFAULT now(),
  updated_at          TIMESTAMPTZ     DEFAULT now()
);

CREATE INDEX IF NOT EXISTS idx_multibm_messages_campaign_id ON multibm_messages (campaign_id);
CREATE INDEX IF NOT EXISTS idx_multibm_messages_infobip_message_id ON multibm_messages (infobip_message_id);
CREATE INDEX IF NOT EXISTS idx_multibm_messages_sender_id ON multibm_messages (sender_id);
CREATE INDEX IF NOT EXISTS idx_multibm_messages_sender_sent_at ON multibm_messages (sender_id, sent_at);
