-- ============================================================
-- Migration 006: Fila e controle de atribuicao do WhatsApp
-- Tabela: whatsapp_chat_atribuicoes
-- ============================================================

-- A atribuicao passa a representar dois estados principais:
-- 1. queued: conversa esta na fila de uma area, sem atendente definido
-- 2. assigned: conversa foi assumida ou transferida diretamente para um atendente
--
-- A janela de atendimento e controlada por expires_at. Ao expirar, a aplicacao
-- trata a proxima mensagem como um novo ciclo de conversa.

ALTER TABLE whatsapp_chat_atribuicoes
  ALTER COLUMN user_id DROP NOT NULL,
  ALTER COLUMN area_id DROP NOT NULL;

ALTER TABLE whatsapp_chat_atribuicoes
  ADD COLUMN IF NOT EXISTS status VARCHAR(40) NOT NULL DEFAULT 'assigned',
  ADD COLUMN IF NOT EXISTS conversation_started_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN IF NOT EXISTS expires_at TIMESTAMP WITH TIME ZONE DEFAULT (CURRENT_TIMESTAMP + INTERVAL '24 hours'),
  ADD COLUMN IF NOT EXISTS transfer_note TEXT,
  ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP;

UPDATE whatsapp_chat_atribuicoes
SET
  status = CASE
    WHEN user_id IS NULL THEN 'queued'
    ELSE 'assigned'
  END,
  conversation_started_at = COALESCE(conversation_started_at, assigned_at, CURRENT_TIMESTAMP),
  expires_at = COALESCE(expires_at, assigned_at + INTERVAL '24 hours', CURRENT_TIMESTAMP + INTERVAL '24 hours'),
  updated_at = COALESCE(updated_at, assigned_at, CURRENT_TIMESTAMP);

CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_area_status
  ON whatsapp_chat_atribuicoes (area_id, status);

CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_user_status
  ON whatsapp_chat_atribuicoes (user_id, status);

CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_expires_at
  ON whatsapp_chat_atribuicoes (expires_at);
