-- 013_geocode_dirty_trigger.sql
-- Auto-requeue du géocodage quand location_text change en DB.
--
-- Avant ce trigger, un changement de localisation (déménagement détecté par le
-- crawler incrémental) laissait les anciennes band_locations en place — rien ne
-- les invalidait. On supprime les band_locations du band concerné dès que son
-- location_text change réellement ; le daemon enqueue (déclenchement manuel +
-- scan périodique de rattrapage, voir enqueue.py) reparse le texte et recrée
-- les steps. Resync complet (pas de diff fin) : simple et sûr, le cache
-- (geocode_cache + le fast-path dedup par (lieu,pays) dans band_locations)
-- absorbe le coût pour les lieux déjà vus ailleurs.

CREATE OR REPLACE FUNCTION bands_geocode_dirty() RETURNS trigger AS $$
BEGIN
  IF TG_OP = 'UPDATE' AND OLD.location_text IS DISTINCT FROM NEW.location_text THEN
    DELETE FROM band_locations WHERE ma_id = NEW.ma_id;
  END IF;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS trg_bands_geocode_dirty ON bands;
CREATE TRIGGER trg_bands_geocode_dirty
AFTER UPDATE OF location_text ON bands
FOR EACH ROW EXECUTE FUNCTION bands_geocode_dirty();
