package de.hhu.ba.yoshikoWrapper.cytoUtil;

import java.util.List;

import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyNetwork;

public class GraphAnalyzer {
	public static boolean isMultiGraph(CyNetwork net) {
		//TODO: Better algorithm?


		int n = net.getNodeCount();
		List<CyEdge> edges = net.getEdgeList();

		//Easiest check: Check if the graph contains more edges than a complete graph
		if (edges.size() > (n*(n-1))/2) {
			return true;
		}

		for (int i = 0; i < edges.size()-1; i++) {
			for (int j=i+1; j<edges.size();j++) {
				if (connectSameNodes(edges.get(i),edges.get(j))){
					return true;
				}
			}
		}

		return false;
	}

	private static boolean connectSameNodes(CyEdge e1, CyEdge e2) {
		if (//Treating all edges as undirected here
				(e1.getSource() == e2.getTarget() && e1.getTarget() == e2.getSource()) ||
				(e1.getSource() == e2.getSource() && e1.getTarget() == e2.getTarget())
				) {
			return true;
		}
		return false;
	}

	public static boolean isDirected(CyNetwork net) {
		for (CyEdge e: net.getEdgeList()) {
			if (e.isDirected()) {
				return true;
			}
		}
		return false;
	}
}