from pathlib import Path
p=Path('/opt/struktur/social-media-radar/intake/meta_ads_intake.py')
s=p.read_text()
s=s.replace('from signal_db import insert_signal, record_source_run  # noqa: E402\n', 'from signal_db import insert_signal, record_source_run  # noqa: E402\nfrom published_at_normalizer import normalize_published_at  # noqa: E402\n')
s=s.replace("            'published_at': ad.get('started_raw'),\n", "            'published_at': normalize_published_at(ad.get('started_raw'), datetime.now(timezone.utc).isoformat()),\n", 1)
old='''        sid = insert_signal(signal)\n        if sid is None:\n            duplicate += 1\n        else:\n            new += 1\n'''
new='''        sid = insert_signal(signal)\n        if sid is None:\n            duplicate += 1\n            # Refresh metadata/creative for an already-known public Ad ID.\n            import sqlite3\n            with sqlite3.connect('/var/lib/sma-data/signals.db') as sync:\n                sync.execute(\n                    "UPDATE signals SET published_at=COALESCE(?,published_at), image_url=COALESCE(NULLIF(?,''),image_url), image_source=COALESCE(NULLIF(?,''),image_source), image_found=CASE WHEN ? <> '' THEN 1 ELSE image_found END, image_checked_at=? WHERE external_id=? AND source_type='meta_ad'",\n                    (signal['published_at'], signal['image_url'], signal['image_source'], signal['image_url'], datetime.now(timezone.utc).isoformat(), signal['external_id']),\n                )\n        else:\n            new += 1\n'''
if old not in s: raise SystemExit('duplicate block missing')
p.write_text(s.replace(old,new,1))
