-- =============================================================================
-- Freemium F1 — limite de pacientes do plano therapist_free
--
-- clinic_free já traz max_patients=30 (em plan_features.limits da feature
-- clinic_calendar, semeado). O therapist_free não tinha limite de pacientes.
-- Pendura max_patients=20 na feature 'patients.manage' (a que o therapist_free
-- já possui, enabled).
--
-- REGRA DE OURO: referenciar plano/feature POR KEY via subquery, nunca por uuid
-- hardcoded (uuids divergem entre ambientes). Idempotente (merge no jsonb).
-- O enforcement em runtime (trigger) está em manual/freemium_f1_plan_limits.
-- =============================================================================

BEGIN;

UPDATE public.plan_features pf
SET limits = COALESCE(pf.limits, '{}'::jsonb) || jsonb_build_object('max_patients', 20)
WHERE pf.plan_id   = (SELECT id FROM public.plans    WHERE key = 'therapist_free')
  AND pf.feature_id = (SELECT id FROM public.features WHERE key = 'patients.manage');

-- Sanidade: garante que o limite ficou gravado (1 linha afetada esperada).
DO $$
DECLARE v int;
BEGIN
    SELECT (pf.limits->>'max_patients')::int INTO v
    FROM public.plan_features pf
    WHERE pf.plan_id   = (SELECT id FROM public.plans    WHERE key = 'therapist_free')
      AND pf.feature_id = (SELECT id FROM public.features WHERE key = 'patients.manage');
    IF v IS DISTINCT FROM 20 THEN
        RAISE EXCEPTION 'therapist_free max_patients esperado 20, obtido %', v;
    END IF;
END $$;

COMMIT;
