from pathlib import Path
from datetime import datetime
app = Path('/opt/struktur/youtube-research/app.py')
tpl = Path('/opt/struktur/youtube-research/templates/index.html')
stamp = datetime.now().strftime('%Y%m%d-%H%M%S')
for p in (app, tpl):
Path(str(p) + f'.bak-watchlist-preselection-fix-{stamp}').write_text(p.read_text())
s = app.read_text()
old = ''' videos = db.get_spateransehen_videos()\n logger.info("Später ansehen: %d Videos in Bewertung.", len(videos))\n return videos'''
new = ''' staged = preselection.list_candidates()\n legacy = db.get_spateransehen_videos()\n videos = staged + legacy\n logger.info("Später ansehen: %d Vorselektion + %d Legacy = %d Videos.", len(staged), len(legacy), len(videos))\n return videos'''
assert old in s, 'spateransehen block not found'
s = s.replace(old, new, 1)
old = ''' title = db.set_video_spateransehen(video_id, False)\n logger.info("Später ansehen: Video %d ('%s') gelöscht.", video_id, title)'''
new = ''' if video_id < 0:\n title = preselection.remove_candidate(video_id)\n else:\n title = db.set_video_spateransehen(video_id, False)\n logger.info("Später ansehen: Video %d ('%s') gelöscht.", video_id, title)'''
assert old in s, 'remove block not found'
s = s.replace(old, new, 1)
old = ''' # Prüfe ob Video existiert\n conn = db.get_connection()\n row = conn.execute("SELECT title FROM videos WHERE id = ?", (video_id,)).fetchone()\n conn.close()\n\n if not row:\n raise HTTPException(status_code=404, detail="Video nicht gefunden")\n\n title = db.move_video_to_library(video_id, library_id)'''
new = ''' if video_id < 0:\n promoted = await pool_to_library(video_id)\n video_id = int(promoted["video_id"])\n\n # Prüfe ob Video existiert\n conn = db.get_connection()\n row = conn.execute("SELECT title FROM videos WHERE id = ?", (video_id,)).fetchone()\n conn.close()\n\n if not row:\n raise HTTPException(status_code=404, detail="Video nicht gefunden")\n\n title = db.move_video_to_library(video_id, library_id)'''
assert old in s, 'move block not found'
s = s.replace(old, new, 1)
app.write_text(s)
s = tpl.read_text()
old = """ const res = await fetch('/api/spateransehen?_t=' + Date.now());"""
new = """ const res = await fetch('/api/spateransehen?_t=' + Date.now());"""
assert old in s
# endpoint stays the same; backend now merges both sources.
old = ''' const watchedStatusBtn = `<button class="btn-watched-status ${r.watched ? 'watched' : 'not-watched'}"\n onclick="toggleWatched(this, ${r.id})"\n title="${r.watched ? 'Als nicht gesehen markieren' : 'Als gesehen markieren'}">\n ${r.watched ? '✓ Gesehen' : '⊙ Nicht gesehen'}\n </button>`;'''
new = ''' const isPreselection = !!r.preselection || Number(r.id) < 0;\n const watchedStatusBtn = isPreselection ? '' : `<button class="btn-watched-status ${r.watched ? 'watched' : 'not-watched'}"\n onclick="toggleWatched(this, ${r.id})"\n title="${r.watched ? 'Als nicht gesehen markieren' : 'Als gesehen markieren'}">\n ${r.watched ? '✓ Gesehen' : '⊙ Nicht gesehen'}\n </button>`;'''
assert old in s, 'watched button block not found'
s = s.replace(old, new, 1)
tpl.write_text(s)
print('PATCHED', stamp)