-- 061 — Teto mensal de respostas da IA por conta
--
-- CONTEXTO (decisão do dono, 31/07/2026): no canal wa_cloud o número que só
-- ATENDE não consome crédito do cliente — ele paga as conversas direto à Meta,
-- com o cartão dele, e a OnSMS cobra mensalidade pelo canal. "Ilimitado" para o
-- cliente, porém, não é grátis para a casa: cada resposta automática é uma
-- chamada de LLM paga pela OnSMS.
--
-- Até aqui só existia limite POR CONTATO (ai_agent_config.max_replies_per_contact),
-- que protege o contato de ser metralhado mas não impede uma conta de gerar
-- dezenas de milhares de respostas no mês. Esta migration cria o teto POR CONTA,
-- com DEGRADAÇÃO: ao estourar, a IA para de responder, mas a MO continua sendo
-- registrada no Chat e o operador humano atende normalmente. Nunca bloqueia o
-- número nem descarta mensagem.
--
-- 0 = sem teto (é o default, então nada muda de comportamento até o admin
-- configurar um valor no Painel do Agente).

BEGIN;

-- Padrão global, editável no Painel do Agente.
ALTER TABLE ai_agent_config
  ADD COLUMN IF NOT EXISTS monthly_reply_limit_default integer NOT NULL DEFAULT 0;

-- Override por conta. NULL = usa o padrão global acima.
ALTER TABLE ai_client_settings
  ADD COLUMN IF NOT EXISTS monthly_reply_limit integer;

-- Contador (conta, mês). Incremento atômico via ON CONFLICT DO UPDATE.
CREATE TABLE IF NOT EXISTS ai_monthly_usage (
  account_root_id varchar NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  year_month varchar(7) NOT NULL,
  replies integer NOT NULL DEFAULT 0,
  updated_at timestamptz NOT NULL DEFAULT now(),
  PRIMARY KEY (account_root_id, year_month)
);

-- Listagem do painel admin: "quem está perto do teto neste mês".
CREATE INDEX IF NOT EXISTS idx_ai_monthly_usage_month
  ON ai_monthly_usage (year_month, replies DESC);

COMMIT;
