import re, json

with open('/opt/pb_data/pb_public_staging/dashboard.html', 'r') as f:
    content = f.read()

changes = 0

# 1. Add sendNavigateEvent and handleNavigateEvent after updateParkingZone()
old = """function updateParkingZone() {
  var zone = document.getElementById('parking-zone');
  if (!zone) return;
  var h = '';
  var hasParked = false;
  Object.keys(widgetSessions).forEach(function(id) {
    var s = widgetSessions[id];
    if (s.state === 'parked' && s.widgets.length > 0) {
      hasParked = true;
      h += '<span class=\"parked-badge\" onclick=\"restoreSession(\\'' + id + '\\')\">\\u25B6 ' + id.replace('session_','') + ' (' + s.widgets.length + ')</span>';
    }
  });
  zone.innerHTML = hasParked ? h : '<span style=\"color:var(--text-muted);font-size:11px\">Ingen parkerede sessioner</span>';
}"""

new = """function updateParkingZone() {
  var zone = document.getElementById('parking-zone');
  if (!zone) return;
  var h = '';
  var hasParked = false;
  Object.keys(widgetSessions).forEach(function(id) {
    var s = widgetSessions[id];
    if (s.state === 'parked' && s.widgets.length > 0) {
      hasParked = true;
      h += '<span class=\"parked-badge\" onclick=\"restoreSession(\\'' + id + '\\')\">\\u25B6 ' + id.replace('session_','') + ' (' + s.widgets.length + ')</span>';
    }
  });
  zone.innerHTML = hasParked ? h : '<span style=\"color:var(--text-muted);font-size:11px\">Ingen parkerede sessioner</span>';
}

// --- SSE navigate event handler ---
function sendNavigateEvent(action, target, id, groupId) {
  fetch('/platform/events/send-event', {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({
      type: 'navigate',
      payload: { action: action, target: target, id: id, group: groupId }
    })
  }).catch(function() {});
}

function handleNavigateEvent(payload) {
  switch(payload.action) {
    case 'close':
      closeSession(payload.group, 'park');
      break;
    case 'close-all':
      parkAllSessions();
      break;
    case 'open':
      if (payload.target === 'project') onProjectClick(payload.id);
      if (payload.target === 'task') onTaskClick(payload.id, payload.group);
      break;
  }
}

// --- createWidgetHTML - widget generator dispatch ---
function createWidgetHTML(type, data) {
  switch(type) {
    case 'task-list':
      return renderDrillWidget('task-list', data);
    case 'task-detail':
      return renderDrillWidget('task-detail', data);
    case 'project-detail':
      return '<div data-widget-type=\"project-detail\" data-project-id=\"' + data.projectId + '\"><div class=\"widget-header\"><div class=\"widget-title\"><span class=\"drag-handle\"><span class=\"dot\"></span><span class=\"dot\"></span><span class=\"dot\"></span></span><span class=\"icon\">\\ud83d\\udcc1</span> ' + data.projectName + '</div><div class=\"widget-actions\"><button onclick=\"closeSession(\\'' + data.sessionGroupId + '\\', \\'park\\')\" title=\"Luk\">\\u2715</button></div></div><div class=\"widget-body\"><div class=\"project-detail\"><div id=\"project-info\">Indlaeser...</div></div></div>';
    case 'project-feed':
      return '<div data-widget-type=\"project-feed\" data-group-id=\"' + data.groupId + '\" data-sse-source=\"feed-' + data.projectId + '\" data-sse-category=\"events\"><div class=\"widget-header\"><div class=\"widget-title\"><span class=\"drag-handle\"><span class=\"dot\"></span><span class=\"dot\"></span><span class=\"dot\"></span></span><span class=\"icon\">\\ud83d\\udcca</span> Aktivitet - ' + data.projectName + ' <span class=\"sse-dot\"></span></div><div class=\"widget-actions\"><button onclick=\"closeSession(\\'' + data.sessionGroupId + '\\', \\'park\\')\" title=\"Luk\">\\u2715</button></div></div><div class=\"widget-body sse-body\"><div class=\"feed-empty\">Ingen aktiviteter endnu</div></div>';
    case 'task-feed':
      return '<div data-widget-type=\"task-feed\" data-group-id=\"task-' + data.taskId + '\" data-sse-source=\"feed-task-' + data.taskId + '\" data-sse-category=\"events\"><div class=\"widget-header\"><div class=\"widget-title\"><span class=\"drag-handle\"><span class=\"dot\"></span><span class=\"dot\"></span><span class=\"dot\"></span></span><span class=\"icon\">\\ud83d\\udcca</span> Aktivitet - ' + data.taskTitle + '</div><div class=\"widget-actions\"><button onclick=\"closeParentSession(this)\" title=\"Luk\">\\u2715</button></div></div><div class=\"widget-body sse-body\"><div class=\"feed-empty\">Ingen aktiviteter endnu</div></div>';
    default:
      return '<div class=\"widget-body\"><div class=\"placeholder\">Ukendt widget type</div></div>';
  }
}

// --- SSE global navigate listener ---
(function() {
  var navEs = new EventSource('/platform/events/events?source=nav&category=navigate');
  navEs.onmessage = function(e) {
    try {
      var d = JSON.parse(e.data);
      if (d.type === 'navigate') {
        handleNavigateEvent(d.payload);
      }
    } catch(ex) {}
  };
  window._navigateSSE = navEs;
})();
"""

if old in content:
    content = content.replace(old, new)
    changes += 1
    print(f"1. sendNavigateEvent/handleNavigateEvent/createWidgetHTML/navigate SSE: OK")
else:
    print(f"1. FAILED: updateParkingZone anchor not found")

# 2. Add widget-group-active and widget-group-child CSS after widget-parked CSS
old_css = """.widget-parked .widget-body { display:none; }
.grid-stack-item-content.widget-parked:hover { transform:none; box-shadow:none; border-color:var(--border); }"""
new_css = """.widget-parked .widget-body { display:none; }
.grid-stack-item-content.widget-parked:hover { transform:none; box-shadow:none; border-color:var(--border); }
.widget-group-active { border-left: 3px solid var(--accent); }
.widget-group-child { border-left: 3px solid var(--warning); }"""

if old_css in content:
    content = content.replace(old_css, new_css)
    changes += 1
    print(f"2. widget-group-active/widget-group-child CSS: OK")
else:
    print(f"2. FAILED: CSS anchor not found")

# 3. Extend renderDrillWidget with ALL 5 types
old_render = """function renderDrillWidget(type, data) {
  if (type === 'task-list') {
    return '<div data-widget-type=\"task-list\" data-group-id=\"session_' + data.projectId + '\" data-sse-source=\"opgaver-' + data.projectId + '\" data-sse-category=\"opgaver\"><div class=\"widget-header\"><div class=\"widget-title\"><span class=\"drag-handle\"><span class=\"dot\"></span><span class=\"dot\"></span><span class=\"dot\"></span></span><span class=\"icon\">\\ud83d\\udccb</span> Opgaver -- ' + data.projectName + ' <span class=\"sse-dot\"></span><span class=\"sse-label\">Forbinder...</span></div><div class=\"widget-actions\"><button onclick=\"closeSession(\\'session_' + data.projectId + '\\', \\'park\\')\" title=\"Luk\">\\u2715</button></div></div><div class=\"widget-body\"><div class=\"sse-body\">0 opgaver</div>';
  }
  if (type === 'task-detail') {
    return '<div data-widget-type=\"task-detail\"><div class=\"widget-header\"><div class=\"widget-title\"><span class=\"drag-handle\"><span class=\"dot\"></span><span class=\"dot\"></span><span class=\"dot\"></span></span><span class=\"icon\">\\ud83d\\udcdd</span> ' + data.taskTitle + '</div><div class=\"widget-actions\"><button onclick=\"parkAllSessions()\" title=\"Luk alle\">\\u2715</button></div></div><div class=\"widget-body\"><div class=\"task-detail\" style=\"padding:12px\"><div class=\"detail-field\" style=\"padding:6px 0;border-bottom:1px solid var(--border2)\"><span style=\"color:var(--text-muted);font-size:11px;display:block\">ID:</span><span style=\"color:var(--text);font-size:13px\">' + data.taskId + '</span></div><div style=\"padding:6px 0;color:var(--text-dim);font-size:12px\">Data kraever SSE integration</div></div>';
  }
  return '<div class=\"widget-body\"><div class=\"placeholder\">Ukendt widget type</div></div>';
}"""

new_render = """function renderDrillWidget(type, data) {
  if (type === 'task-list') {
    return '<div data-widget-type=\"task-list\" data-group-id=\"session_' + data.projectId + '\" data-sse-source=\"opgaver-' + data.projectId + '\" data-sse-category=\"opgaver\"><div class=\"widget-header\"><div class=\"widget-title\"><span class=\"drag-handle\"><span class=\"dot\"></span><span class=\"dot\"></span><span class=\"dot\"></span></span><span class=\"icon\">\\ud83d\\udccb</span> Opgaver -- ' + data.projectName + ' <span class=\"sse-dot\"></span><span class=\"sse-label\">Forbinder...</span></div><div class=\"widget-actions\"><button onclick=\"closeSession(\\'session_' + data.projectId + '\\', \\'park\\')\" title=\"Luk\">\\u2715</button></div></div><div class=\"widget-body\"><div class=\"sse-body\">0 opgaver</div>';
  }
  if (type === 'task-detail') {
    return '<div data-widget-type=\"task-detail\"><div class=\"widget-header\"><div class=\"widget-title\"><span class=\"drag-handle\"><span class=\"dot\"></span><span class=\"dot\"></span><span class=\"dot\"></span></span><span class=\"icon\">\\ud83d\\udcdd</span> ' + data.taskTitle + '</div><div class=\"widget-actions\"><button onclick=\"parkAllSessions()\" title=\"Luk alle\">\\u2715</button></div></div><div class=\"widget-body\"><div class=\"task-detail\" style=\"padding:12px\"><div class=\"detail-field\" style=\"padding:6px 0;border-bottom:1px solid var(--border2)\"><span style=\"color:var(--text-muted);font-size:11px;display:block\">ID:</span><span style=\"color:var(--text);font-size:13px\">' + data.taskId + '</span></div><div style=\"padding:6px 0;color:var(--text-dim);font-size:12px\">Data kraever SSE integration</div></div>';
  }
  if (type === 'project-detail') {
    return '<div data-widget-type=\"project-detail\" data-project-id=\"' + data.projectId + '\"><div class=\"widget-header\"><div class=\"widget-title\"><span class=\"drag-handle\"><span class=\"dot\"></span><span class=\"dot\"></span><span class=\"dot\"></span></span><span class=\"icon\">\\ud83d\\udcc1</span> ' + data.projectName + '</div><div class=\"widget-actions\"><button onclick=\"closeSession(\\'session_' + data.projectId + '\\', \\'park\\')\" title=\"Luk\">\\u2715</button></div></div><div class=\"widget-body\"><div class=\"project-detail\"><div id=\"project-info\">Indlaeser...</div></div></div>';
  }
  if (type === 'project-feed') {
    return '<div data-widget-type=\"project-feed\" data-group-id=\"session_' + data.projectId + '\" data-sse-source=\"feed-' + data.projectId + '\" data-sse-category=\"events\"><div class=\"widget-header\"><div class=\"widget-title\"><span class=\"drag-handle\"><span class=\"dot\"></span><span class=\"dot\"></span><span class=\"dot\"></span></span><span class=\"icon\">\\ud83d\\udcca</span> Aktivitet -- ' + data.projectName + ' <span class=\"sse-dot\"></span></div><div class=\"widget-actions\"><button onclick=\"closeSession(\\'session_' + data.projectId + '\\', \\'park\\')\" title=\"Luk\">\\u2715</button></div></div><div class=\"widget-body sse-body\"><div class=\"feed-empty\">Ingen aktiviteter endnu</div></div>';
  }
  if (type === 'task-feed') {
    return '<div data-widget-type=\"task-feed\" data-group-id=\"task-' + data.taskId + '\" data-sse-source=\"feed-task-' + data.taskId + '\" data-sse-category=\"events\"><div class=\"widget-header\"><div class=\"widget-title\"><span class=\"drag-handle\"><span class=\"dot\"></span><span class=\"dot\"></span><span class=\"dot\"></span></span><span class=\"icon\">\\ud83d\\udcca</span> Aktivitet -- ' + data.taskTitle + '</div><div class=\"widget-actions\"><button onclick=\"closeParentSession(this)\" title=\"Luk\">\\u2715</button></div></div><div class=\"widget-body sse-body\"><div class=\"feed-empty\">Ingen aktiviteter endnu</div></div>';
  }
  return '<div class=\"widget-body\"><div class=\"placeholder\">Ukendt widget type</div></div>';
}"""

if old_render in content:
    content = content.replace(old_render, new_render)
    changes += 1
    print(f"3. renderDrillWidget extended with project-detail/project-feed/task-feed: OK")
else:
    print(f"3. FAILED: renderDrillWidget anchor not found")

with open('/opt/pb_data/pb_public_staging/dashboard.html', 'w') as f:
    f.write(content)

print(f"\nTotal: {changes} changes applied")