-- Migración 002: campos multi-valor en persons + frontmatter no-owned.
--
-- La inversión "DuckDB como fuente de verdad" hace que las fichas de persona
-- puedan tener varios teléfonos, emails y direcciones (no solo el singular del
-- frontmatter). Se añaden columnas JSON con la lista completa y se mantienen las
-- columnas singulares (telefono/email/direccion) por compatibilidad: el service
-- las rellena con el primer elemento de cada lista al materializar la ficha.
--
-- extra_fm guarda las claves del frontmatter de la nota que NO son campos OWNED
-- de la DB ni claves de control (slug/tipo/fuente/note_path): así un re-ingest
-- del vault puede refrescarlas sin pisar lo que la DB posee.
--
-- DuckDB 1.5.3: soporta ALTER TABLE ADD COLUMN IF NOT EXISTS y to_json([...]).
-- Aditiva e idempotente.

ALTER TABLE persons ADD COLUMN IF NOT EXISTS telefonos    JSON;
ALTER TABLE persons ADD COLUMN IF NOT EXISTS emails       JSON;
ALTER TABLE persons ADD COLUMN IF NOT EXISTS direcciones  JSON;
ALTER TABLE persons ADD COLUMN IF NOT EXISTS extra_fm     JSON;

-- Backfill: deriva las listas desde los singulares existentes la primera vez.
-- COALESCE deja '[]' donde no había singular, para no dejar NULLs en las listas.
UPDATE persons SET
  telefonos   = CASE WHEN telefonos   IS NULL AND telefono  IS NOT NULL THEN to_json([telefono])  ELSE COALESCE(telefonos,  '[]') END,
  emails      = CASE WHEN emails      IS NULL AND email     IS NOT NULL THEN to_json([email])     ELSE COALESCE(emails,     '[]') END,
  direcciones = CASE WHEN direcciones IS NULL AND direccion IS NOT NULL THEN to_json([direccion]) ELSE COALESCE(direcciones,'[]') END;
