package business;

import java.awt.Point;
import java.util.Random;
import java.util.Vector;

import utils.Constantes;

public class Aleatorio extends Grafo {

	public Aleatorio(Integer numeroVertices, Integer numeroAristas, Integer probabilidad) {
		int radio = 80 + 5 * numeroVertices;
		int xPrimero = radio + 250;
		int yPrimero = 80;
		Random r = new Random();

		for(int i = 0; i < numeroVertices; i++) {
			double angulo = i * 2 * Constantes.PI / numeroVertices - Constantes.PI / 2 ;
			int x = xPrimero + (int)(radio * Math.cos(angulo));
			int y = yPrimero + radio + (int)(radio * Math.sin(angulo));
			anadirVertice(new Vertice(new Point(x,y), getVerticeId(), false));
		}

		if(probabilidad != null) {
			for(int i = 0; i < numeroVertices; i++) {
				for(int j = i + 1; j < numeroVertices; j++) {
					int numero = Math.abs(r.nextInt()) % 100 + 1;
					if(numero <= probabilidad) {
						anadirArista(new Arista(vertices.get(i), vertices.get(j), getAristaId(), false));
					}
				}
			}
		} else if (numeroAristas != null) {
			Vector<Vector<Integer>> combinaciones = new Vector<Vector<Integer>>();
			for(int i = 0; i < numeroVertices; i++) {
				for(int j = i+1; j < numeroVertices; j++) {
					Vector<Integer> vector = new Vector<Integer>(3);
					vector.add(i);
					vector.add(j);
					vector.add(0);
					combinaciones.add(vector);
				}
			}
			for(; numeroAristas>0; numeroAristas--) {
				Integer numero = Math.abs(r.nextInt()) % combinaciones.size();
				anadirArista(new Arista(vertices.get(combinaciones.get(numero).get(0)), vertices.get(combinaciones.get(numero).get(1)), getAristaId(), false));
				combinaciones.removeElementAt(numero);
			}
		}

	}
}