// Copyright (c) 2018, 2019 Kiel University and others.
//
// SPDX-License-Identifier: EPL-2.0

package intermediate

import (
	basegraph 
	
	
)

// PreprocessSelfLoops installs ELK's temporary self-loop model and hides
// self-loop edges and freely orderable pure self-loop ports from phases 1-3.
func ( *layered.LGraphArena,  layered.LGraphID) error {
	for ,  := range .Graph().LayerlessNodes {
		if !loops.NeedsProcessing(, ) {
			continue
		}
		,  := loops.Install(, )
		if  != nil {
			return 
		}
		hideSelfLoopEdges(, )
		hideSelfLoopPorts(, )
	}
	return nil
}

func hideSelfLoopEdges( *layered.LGraphArena,  *loops.Holder) {
	for ,  := range .HyperLoops {
		for ,  := range .Edges {
			.SetEdgeSource(.LEdge, nil)
			.SetEdgeTarget(.LEdge, nil)
		}
	}
}

func hideSelfLoopPorts( *layered.LGraphArena,  *loops.Holder) {
	 := .Node(.LNode)
	 := basegraph.Get(&.Properties, layered.PortConstraintsOption).IsOrderFixed()
	 := false
	if .NestedGraph != nil {
		 := basegraph.Get(&.Graph(*.NestedGraph).Properties, layered.GraphProperties)
		 = &layered.GraphPropertyExternalPorts != 0
	}
	if  ||  {
		return
	}

	for ,  := range .PortOrder {
		 := .Ports[]
		if !.HadOnlySelfLoops {
			continue
		}
		.SetPortNode(, nil)
		.Hidden = true
		.PortsHidden = true
	}
}