-- 012_geocode_confidence.sql
-- Durcissement du géocodage : on rend la confiance et la granularité exploitables.
--
-- Bug corrigé côté worker : sur un cache hit, la confiance était écrite à 0.5 en
-- dur, jetant la vraie valeur présente dans le raw. On ajoute des colonnes
-- confidence + granularity à geocode_cache et on les recalcule depuis le raw
-- Geoapify (FeatureCollection). Aucune purge ici (la purge Nominatim + le reset
-- complet sont des boutons admin, pour maîtriser le budget API).

ALTER TABLE band_locations
  ADD COLUMN IF NOT EXISTS geocode_granularity TEXT;

ALTER TABLE geocode_cache
  ADD COLUMN IF NOT EXISTS confidence  REAL,
  ADD COLUMN IF NOT EXISTS granularity TEXT;

-- Recalcul pour les entrées Geoapify (raw = FeatureCollection avec rank.confidence)
UPDATE geocode_cache
SET confidence  = NULLIF(raw->'features'->0->'properties'->'rank'->>'confidence', '')::real,
    granularity = raw->'features'->0->'properties'->>'result_type'
WHERE raw ? 'features'
  AND confidence IS NULL;

-- Fast-path de dedup au niveau step : lookup par lieu normalisé
CREATE INDEX IF NOT EXISTS idx_bl_locraw_lower ON band_locations (lower(location_raw));
