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

package intermediate

import (
	

	basegraph 
	
	
	looprouting 
)

// RouteSelfLoops runs ELK's routing-director, label-placement, slot-assignment,
// and orthogonal routing chain for every normal self-loop node.
func ( *layered.LGraphArena,  layered.LGraphID) error {
	 := basegraph.Get(&.Graph().Properties, layered.EdgeRoutingOption)
	for ,  := range .Graph().Layers {
		for ,  := range .Layer().Nodes {
			 := .Node()
			if .Type != layered.NormalNode {
				continue
			}
			,  := basegraph.TryGet(&.Properties, loops.HolderProperty)
			if ! {
				continue
			}
			if  := looprouting.DetermineLoopRoutes(, );  != nil {
				return 
			}
			if  := looprouting.PlaceLabels(, );  != nil {
				return 
			}
			looprouting.AssignRoutingSlots(, )
			switch  {
			case layered.EdgeRoutingOrthogonal, layered.EdgeRoutingUndefined:
				looprouting.RouteOrthogonal(, )
			case layered.EdgeRoutingPolyline:
				looprouting.RoutePolyline(, )
			case layered.EdgeRoutingSplines:
				looprouting.RouteSpline(, )
			default:
				return fmt.Errorf("self-loop router: routing mode %d is not implemented", )
			}
		}
	}
	return nil
}