-- Sprint 4 (v3.0.0) — Esquema declarativo del formulario wizard
-- Extiende questions con tres campos para soporte de instanciación y secciones.
-- Ver ADR-005: la lógica del flujo vive en datos, el frontend es un renderer.

-- 1. instance_generator: marca la pregunta que genera instancias del mini-wizard.
--    true en pregunta 4.1 (vínculos familiares); false en todas las demás.
ALTER TABLE public.questions
  ADD COLUMN IF NOT EXISTS instance_generator boolean NOT NULL DEFAULT false;

-- 2. instance_of: código de la pregunta generadora de la que depende esta pregunta.
--    '4.1' en preguntas 4.2 y 4.3 (se repiten una vez por familiar declarado en 4.1).
--    NULL en todas las preguntas que no forman parte del mini-wizard.
ALTER TABLE public.questions
  ADD COLUMN IF NOT EXISTS instance_of text;

-- 3. hint: texto auxiliar que el renderer muestra bajo el enunciado.
--    Para type='section': descripción del "porqué" de la sección (ADR-005 §4.2, Opción C).
--    Para preguntas regulares: hint de ayuda ("Podés marcar más de una opción", etc.).
--    NULL cuando no aplica.
ALTER TABLE public.questions
  ADD COLUMN IF NOT EXISTS hint text;

-- ── Vocabulario extendido de conditional_rules (referencia para el motor de flujo) ──
--
-- Formato de cada regla:
--   { "if_question": CODE | CODE[], "op": OPERATOR, "value": VALUE, "action": ACTION }
--
-- Operadores:
--   "eq"       — igualdad simple: la respuesta a if_question == value
--   "eq_any"   — OR lógico: AL MENOS UNO de los if_question[] == value
--   "not_in"   — la respuesta a if_question NO está en value (array de strings)
--   "contains" — la respuesta (multiple_choice) CONTIENE value como uno de los
--                elementos seleccionados; útil para detectar "Ninguna de las anteriores"
--   "eq_sole"  — la respuesta (multiple_choice) tiene VALUE como ÚNICO elemento
--                seleccionado; usado para el recorrido "solo niño sin discapacidad"
--
-- Acciones:
--   "show"    — mostrar esta pregunta/sección cuando la condición se cumple
--   "hide"    — ocultar esta pregunta/sección cuando la condición se cumple
--
-- Semántica de auto-target: la regla afecta a la pregunta/sección que la porta.
-- Sin campo "target": una pregunta declara su propia condición de visibilidad.
--
-- Ejemplo — salto "Ninguna de las anteriores" en 4.1 oculta secciones S5-S7:
--   { "if_question": "4.1", "op": "not_in",
--     "value": ["Discapacidad propia", "Familiar con discapacidad", "Adulto mayor"],
--     "action": "hide" }
