import { locateNode } from "./node_explorer.js"; export function buildDependencyGraph( dependencyData ) { const wrapper = document.createElement( "div" ); wrapper.style.padding = "10px"; const maxDependencies = dependencyData?.max_dependencies ?? 0; const maxDependents = dependencyData?.max_dependents ?? 0; const isolatedNodeCount = dependencyData?.isolated_node_count ?? 0; const dependencyComplexity = dependencyData?.dependency_complexity ?? "Unknown"; const dependencyScore = dependencyData?.dependency_score ?? 0; let complexityColor = "#00cc66"; if ( dependencyComplexity === "Medium" ) { complexityColor = "#ffaa00"; } if ( dependencyComplexity === "High" ) { complexityColor = "#ff4444"; } wrapper.innerHTML = `

Dependency Graph

Max Dependencies

${maxDependencies}

Max Dependents

${maxDependents}

Isolated Nodes

${isolatedNodeCount}

Dependency Complexity

${dependencyComplexity}

Score: ${dependencyScore}

`; const mostDependent = dependencyData?.most_dependent_node; const mostConnected = dependencyData?.most_connected_node; const createNodeCard = ( title, node, type ) => { const section = document.createElement( "div" ); section.style.background = "#252526"; section.style.border = "1px solid #444"; section.style.borderRadius = "10px"; section.style.padding = "15px"; section.style.marginBottom = "20px"; section.innerHTML = `

${title}

`; if (!node) { section.innerHTML += `

No data available.

`; return section; } const card = document.createElement( "div" ); card.style.border = "1px solid #555"; card.style.borderRadius = "8px"; card.style.padding = "10px"; card.innerHTML = ` ${node.node_type}
Node ID: ${node.node_id}
${ type === "dependency" ? `Dependencies: ${node.dependency_count}` : `Dependents: ${node.dependent_count}` } `; const button = document.createElement( "button" ); button.innerText = "Locate Node"; button.style.marginTop = "10px"; button.onclick = () => { locateNode( node.node_id ); }; card.appendChild( button ); section.appendChild( card ); return section; }; wrapper.appendChild( createNodeCard( "Most Dependent Node", mostDependent, "dependency" ) ); wrapper.appendChild( createNodeCard( "Most Connected Node", mostConnected, "dependent" ) ); const isolatedSection = document.createElement( "div" ); isolatedSection.style.background = "#252526"; isolatedSection.style.border = "1px solid #444"; isolatedSection.style.borderRadius = "10px"; isolatedSection.style.padding = "15px"; isolatedSection.style.marginBottom = "20px"; isolatedSection.innerHTML = `

Isolated Nodes

`; const isolatedNodes = dependencyData?.isolated_nodes ?? []; if ( isolatedNodes.length === 0 ) { isolatedSection.innerHTML += `

No isolated nodes detected.

`; } else { isolatedNodes.forEach( node => { const card = document.createElement( "div" ); card.style.border = "1px solid #555"; card.style.borderRadius = "8px"; card.style.padding = "10px"; card.style.marginBottom = "10px"; card.innerHTML = ` ${node.node_type}
Node ID: ${node.node_id} `; const button = document.createElement( "button" ); button.innerText = "Locate Node"; button.style.marginTop = "10px"; button.onclick = () => { locateNode( node.node_id ); }; card.appendChild( button ); isolatedSection.appendChild( card ); } ); } wrapper.appendChild( isolatedSection ); const insightsSection = document.createElement( "div" ); insightsSection.style.background = "#252526"; insightsSection.style.border = "1px solid #444"; insightsSection.style.borderRadius = "10px"; insightsSection.style.padding = "15px"; insightsSection.innerHTML = `

Dependency Insights

`; const list = document.createElement( "ul" ); const insights = dependencyData?.insights ?? []; insights.forEach( insight => { const item = document.createElement( "li" ); item.innerText = insight; list.appendChild( item ); } ); insightsSection.appendChild( list ); wrapper.appendChild( insightsSection ); return wrapper; }