-- ============================================================================
-- Adiciona coluna charging_style em billing_contracts
-- ----------------------------------------------------------------------------
-- Identifica como o pacote foi cobrado na criação:
--   'upfront'    → 1 financial_record total criado na hora; sessões só
--                  consomem saldo, não geram nova cobrança
--   'saldo'      → sem financial_record na criação; cada sessão realizada
--                  gera 1 cobrança individual e incrementa sessions_used
--   'per_session'→ N financial_records já criados na materialização da série
--                  (chargeMode='per_session' do AgendaEventDialog)
--
-- Sem esse campo, o handler de status change não saberia distinguir entre
-- "já tudo pago, só atualizar status" vs "criar cobrança nova".
-- ============================================================================

BEGIN;

ALTER TABLE public.billing_contracts
    ADD COLUMN IF NOT EXISTS charging_style text DEFAULT 'saldo';

-- Constraint pra restringir aos 3 valores válidos
ALTER TABLE public.billing_contracts
    DROP CONSTRAINT IF EXISTS billing_contracts_charging_style_chk;
ALTER TABLE public.billing_contracts
    ADD CONSTRAINT billing_contracts_charging_style_chk
        CHECK (charging_style = ANY (ARRAY['upfront'::text, 'saldo'::text, 'per_session'::text]));

COMMENT ON COLUMN public.billing_contracts.charging_style IS
    'Estilo de cobrança: upfront (1 record total no início), saldo (cobra por sessão realizada), per_session (N records já criados).';

COMMIT;
