package Heuristics.Helpers;

import FaultTree.*;

import java.util.HashMap;
import java.util.Map;

public class DepthFirstByWeightOrderer extends AbstractFaultTreeVisitor {
    private Map<FaultTree, Integer> weights;
    private int counter = 0;
    private Map<BasicEvent, Integer> order = new HashMap<>();

    public DepthFirstByWeightOrderer(Map<FaultTree, Integer> weights) {
        this.weights = weights;
    }
    
    @Override
    public void visitIntermediateEvent(IntermediateEvent event) {
        if (weights.get(event.left) >= weights.get(event.right)) {
            visit(event.left);
            visit(event.right);
        } else {
            visit(event.right);
            visit(event.left);
        }
    }

    @Override
    public void visitBasicEvent(BasicEvent event) {
        order.put(event, counter++);
    }
    
    public Map<BasicEvent, Integer> getOrder() {
        return order;
    }
}