-- Canal SMS (MKOM) — credenciais por rota, partes por mensagem e respostas MO.
-- Uma rota comercial (SMS Massivo, short code, etc.) = um serviço tipo "sms"
-- com sua própria sms_config (token + centro de custo), igual ao modelo RCS.

CREATE TABLE IF NOT EXISTS sms_configs (
  id varchar PRIMARY KEY DEFAULT gen_random_uuid(),
  service_id varchar NOT NULL REFERENCES services(id) ON DELETE CASCADE,
  api_token text NOT NULL,
  base_url varchar NOT NULL DEFAULT 'https://sms.mkmservice.com',
  cost_centre_id varchar NOT NULL DEFAULT '',
  webhook_token varchar,
  ativo boolean NOT NULL DEFAULT true,
  created_at timestamptz DEFAULT now(),
  updated_at timestamptz DEFAULT now()
);

-- sms_messages (criada na 052) ganha o id do lote e as PARTES do SMS —
-- a cobrança e o estorno são por parte, não por contato.
ALTER TABLE sms_messages ADD COLUMN IF NOT EXISTS parts integer NOT NULL DEFAULT 1;
ALTER TABLE sms_messages ADD COLUMN IF NOT EXISTS mailing_id varchar;
CREATE INDEX IF NOT EXISTS idx_sms_messages_reference ON sms_messages (reference_id);
CREATE INDEX IF NOT EXISTS idx_sms_messages_campaign ON sms_messages (campaign_id);

-- Respostas recebidas. dedupe_key ÚNICA: o worker reprocessa eventos com
-- retry, e sem essa trava a mesma resposta cobraria crédito mais de uma vez.
CREATE TABLE IF NOT EXISTS sms_replies (
  id varchar PRIMARY KEY DEFAULT gen_random_uuid(),
  service_id varchar,
  campaign_id varchar,
  sms_message_id varchar,
  phone varchar(20) NOT NULL,
  message text NOT NULL,
  vendor_message_id varchar,
  reference_id varchar,
  owner_user_id varchar,
  dedupe_key varchar(120) NOT NULL UNIQUE,
  charged_credits integer NOT NULL DEFAULT 0,
  received_at timestamptz DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_sms_replies_campaign ON sms_replies (campaign_id);
