package algoritmo;

import java.util.Vector;


public class ConjuntoDeAgentes {

	/**
	 * @param args
	 */
	
	Vector <Agente> agentes = null;
	int numAgentes;

    public ConjuntoDeAgentes(){
        agentes = new Vector<Agente>();
    }
	/*
    private ConjuntoDeAgentes(){
		
	}
	
	//Retorna a instancia unica da classe SingletonLog
    public static ConjuntoDeAgentes getInstance() {
        return ConjuntoDeAgentesHolder.instancia;
    }

	 //Classe auxiliar para criacao da instancia. Evita problemas de sincronizacao de threads.
    private static class ConjuntoDeAgentesHolder {
           private static ConjuntoDeAgentes instancia = new ConjuntoDeAgentes();
    }
    */
	
	public void inserirAgente(Agente agente){
		agentes.add(agente);
	}
	
	public void removerAgente(Agente agente){
		agentes.remove(agente);
	}

    public void removerTodos(){
        agentes.removeAllElements();
    }
    //Detecta se existe o agente cuja area  engloba a posição passada como parametro
	public boolean existeAgente(double[] posicao){
		double[] posicaoAgente;
        //espaço ocupado pelo agente
        double comprimentoHorizontal;
        double comprimentoVertical;
		for(int i = 0; i< agentes.size(); i++){
			posicaoAgente = agentes.get(i).getPosicao();
            comprimentoHorizontal = agentes.get(i).getComprimentoHorizontal();
            comprimentoVertical = agentes.get(i).getComprimentoVertical();

			if(posicaoAgente[0]-comprimentoHorizontal<=posicao[0] && posicao[0]<=posicaoAgente[0]+comprimentoHorizontal
                           && posicaoAgente[1]-comprimentoVertical<=posicao[1] && posicao[1]<=posicaoAgente[1]+comprimentoVertical){
				return true;
			}		
		}
		return false;
	}

    //Detecta o agente cuja area  engloba a posição passada como parametro
    public Agente buscarAgente(double[] posicao){
		double[] posicaoAgente;
        //espaço ocupado pelo agente
        double comprimentoHorizontal;
        double comprimentoVertical;
		for(int i = 0; i< agentes.size(); i++){
			posicaoAgente = agentes.get(i).getPosicao();
            comprimentoHorizontal = agentes.get(i).getComprimentoHorizontal();
            comprimentoVertical = agentes.get(i).getComprimentoVertical();

			if(posicaoAgente[0]-comprimentoHorizontal<=posicao[0] && posicao[0]<=posicaoAgente[0]+comprimentoHorizontal
                           && posicaoAgente[1]-comprimentoVertical<=posicao[1] && posicao[1]<=posicaoAgente[1]+comprimentoVertical){
				return agentes.get(i);
			}		
		}
		return null;
	}

	
	public int getNumAgentes(){
		return agentes.size();
	}
	
	public Agente get(int index){
		return agentes.get(index);
	}
	public String toString(){
		String retorno = "Conjunto de Agentes:";
		for(int i =0; i<agentes.size();i++){
			retorno += "\n"+ agentes.get(i).toString();
		}
		return retorno;
	}
	
	public double[] converterPxParaMetro1(int pixelLinha, int pixelColuna,
			int imageWidth, int imageHight,/* Em pixels */
			double ambienteWidth, double ambienteHight) {

		double pxLinha = pixelLinha;
		double pxColuna = pixelColuna;
		double larguraImagem = imageWidth;
		double alturaImagem = imageHight;
		double larguraAmbiente = ambienteWidth;
		double alturaAmbiente = ambienteHight;

		double pontoLinha = (pxLinha / larguraImagem) * alturaAmbiente;
		double pontoColuna = (pxColuna / alturaImagem) * larguraAmbiente;

		System.out.println("aaaaaaa   px  " + pxLinha + "," + pxColuna);
		System.out.println("aaaaaaa   dimesaoImagem   " + alturaImagem + ","
				+ larguraImagem);
		System.out.println("aaaaaaa   dimesaoAmbiente   " + alturaAmbiente
				+ "," + larguraAmbiente);
		System.out.println("aaaaaaa   Ponto  eixo X: " + pontoLinha
				+ "  eixoY: " + pontoColuna);

		double[] ponto = new double[2];
		ponto[0] = pontoLinha;
		ponto[1] = pontoColuna;

		return ponto;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
