from pathlib import Path
p=Path('/opt/struktur/social-media-agent/app.py')
s=p.read_text()
s=s.replace('sort="relevance"', 'sort="relevance"', 1)
s=s.replace('comp_clause = "AND competition_signal = 1" if competition_only else ""', 'comp_clause = "AND COALESCE(competition_signal,0) = 1" if competition_only else "AND COALESCE(competition_signal,0) = 0"')
s=s.replace(''' "relevance": "pinned DESC, radar_score DESC, relevance_score DESC, observed_at DESC",''',''' "relevance": "pinned DESC, radar_score DESC, relevance_score DESC, observed_at DESC",
"score": "pinned DESC, radar_score DESC, relevance_score DESC, observed_at DESC",''')
s=s.replace('sort = request.args.get("sort", "op_priority")', 'sort = request.args.get("sort", "relevance")')
s=s.replace('sort = request.args.get("sort", "op_priority")', 'sort = request.args.get("sort", "relevance")')
p.write_text(s)
p=Path('/opt/struktur/social-media-agent/templates/cockpit.html')
s=p.read_text()
old=""" {% for sk,sl in [('op_priority','Priorität ↓'),('relevance','Score ↓'),('newest','Neu ↓'),('virality','Viral ↓'),('linkedin','LI · Filter'),('facebook','FB · Filter')] %}
<a href=\"/cockpit?days={{days}}&sort={{sk}}&tab={{tab}}\" class=\"f {{'on on-s' if sort==sk else ''}}\" data-platform-filter=\"{{sk}}\" onclick=\"return togglePlatformFilter(event,'{{sk}}')\">{{sl}}</a>
{% endfor %}"""
new=""" {% for sk,sl in [('op_priority','Priorität ↓'),('score','Score ↓'),('newest','Neu ↓'),('linkedin','LI · Filter'),('facebook','FB · Filter')] %}
<a href=\"/cockpit?days={{days}}&sort={{sk}}&tab={{tab}}\" class=\"f {{'on on-s' if sort==sk else ''}}\" data-radar-mode=\"{{sk}}\" onclick=\"return toggleRadarMode(event,'{{sk}}')\">{{sl}}</a>
{% endfor %}
<span class=\"f disabled-mode\" title=\"Nicht verfügbar: keine belastbaren Engagementdaten\">Viral (nicht verfügbar)</span>"""
if old not in s: raise SystemExit('template buttons anchor missing')
s=s.replace(old,new)
oldjs='''function togglePlatformFilter(event, platform) {
if (platform !== 'facebook' && platform !== 'linkedin') return true;
event.preventDefault();
const url = new URL(window.location.href);
const active = url.searchParams.get('sort') === platform;
url.searchParams.set('sort', active ? 'relevance' : platform);
window.location.href = url.toString();
return false;
}'''
newjs='''function toggleRadarMode(event, mode) {
event.preventDefault();
const url = new URL(window.location.href);
const current = url.searchParams.get('sort') || 'relevance';
const active = current === mode;
// All optional modes are reversible; relevance is the neutral default.
url.searchParams.set('sort', active ? 'relevance' : mode);
url.searchParams.set('tab', 'radar');
window.location.href = url.toString();
return false;
}
function togglePlatformFilter(event, platform) {
return toggleRadarMode(event, platform);
}'''
if oldjs not in s: raise SystemExit('js anchor missing')
s=s.replace(oldjs,newjs)
# add visual disabled style near existing filter styles
s=s.replace('.fsep{', '.disabled-mode{opacity:.45;cursor:not-allowed;text-decoration:line-through;}\n.fsep{', 1)
p.write_text(s)