package  pckDesenho;

import java.awt.*;
import pckMapa.*;
import pckPlano.*;

public class Aresta{

    /**
     * Aresta eh a representacao geometrica( fisica ) de um trecho.
     **/

    /**
     * Atributos
     *
     **/

    /**
     * Vertice que indica o inicio do trecho
     **/
    Vertice verticeInicial;

    /**
     * Vertice que indica o final do trecho
     **/
    Vertice verticeFinal;

    /**
     * Apontador para o objeto trecho equivalente a Aresta
     **/
    Trecho trechoEquivalente; 


    /**
     *  Cor de uma Aresta.
     *  A cor indica o numero de rotas que passa pela aresta.
     **/ 
    Color cor;

    /**
     * Nome da cor da aresta.
     **/
    String nomecor;


    /**
     * Metodos
     **/


    /**
     *  Cria uma aresta vazia
     *  Entrada: Nenhuma
     *  Saida: Nova aresta
     **/
    public Aresta() {
	verticeInicial = null;
	verticeFinal = null;
	cor = null;
	nomecor = new String("apagada");
    }

    /** 
     *  Cria uma Aresta baseada em um trecho.
     *  Busca as informacoes de ponto inicial e final no trecho.
     *  Entrada: "TrechoEquivalente" trecho que serah representado 
     *  graficamente atraves da aresta.
     *  Saida: Nova Aresta
     **/

    public Aresta(Trecho TrechoEquivalente) {
	Ponto temp;
	this.trechoEquivalente = TrechoEquivalente;
	temp = TrechoEquivalente.getOrigPos();
	verticeInicial.setX(temp.getX());
	verticeInicial.setY(temp.getY());
	temp = TrechoEquivalente.getDestPos();
	verticeFinal.setX(temp.getX());
	verticeFinal.setY(temp.getY());
	cor = new Color(000000); // toda aresta eh criada preta
	nomecor = new String("preto");
    }

    /**
     * Cria uma Aresta baseada nos pontos de vertice inicial e final
     * Entrada:Vertices inicial e final da aresta.
     * Saida: Nova Aresta

     **/

    public Aresta(Vertice vinicial, Vertice vfinal) {
	verticeInicial = vinicial;
	verticeFinal = vfinal;
	cor = new Color(000000);
	nomecor = new String("preto");
    }
    public void setInicialX(int x) // funcoes que manipulam um vertice.
    {
	verticeInicial.setX(x);
    }
    public void setInicialY(int y)
    {
	verticeInicial.setY(y);
    }
    public void multInicial(float m)
    {
	verticeInicial.multiplicaCoordenada(m);
    }
    public void setFinalX(int x) // funcoes que manipulam um vertice.
    {
	verticeFinal.setX(x);
    }
    public void setFinalY(int y)
    {
	verticeFinal.setY(y);
    }
    public void multFinal(float m)
    {
	verticeFinal.multiplicaCoordenada(m);
    }
    /**
     * Altera a cor da Aresta para "cor" passada como parametro.
     * Entrada: nova cor da aresta
     * Saida: Nenhuma
     **/
    public void setCor(String cor) {
	if (cor.equals("preto")) {
	    this.cor = new Color(000000); nomecor = "preto";
	} else if (cor.equals("azul claro")) {
	    this.cor = new Color(7832572); nomecor = "azul claro";
	} else if (cor.equals("azul")) {
	    this.cor = new Color(255); nomecor = "azul";
	} else if (cor.equals("azul escuro")) {
	    this.cor = new Color(197539); nomecor = "azul escuro";
	} else if (cor.equals("verde claro")) {
	    this.cor = new Color(64612); nomecor = "verde claro";
	} else if (cor.equals("verde")) {
	    this.cor = new Color(65280); nomecor = "verde";
	} else if (cor.equals("verde escuro")) {
	    this.cor = new Color(39168); nomecor = "verde escuro";
	} else if (cor.equals("amarelo claro")) {
	    this.cor = new Color(16383828); nomecor = "amarelo claro";
	} else if (cor.equals("amarelo")) {
	    this.cor = new Color(16776960); nomecor = "amarelo";
	} else if (cor.equals("amarelo escuro")) {
	    this.cor = new Color(14404612); nomecor = "amarelo escuro";
	} else if (cor.equals("laranja claro")) {
	    this.cor = new Color(16758095); nomecor = "laranja claro";
	} else if (cor.equals("laranja")) {
	    this.cor = new Color(16750848); nomecor = "laranja";
	} else if (cor.equals("laranja escuro")) {
	    this.cor = new Color(15035136); nomecor = "laranja escuro";
	} else if (cor.equals("vermelho claro")) {
	    this.cor = new Color(16723245); nomecor = "vermelho claro";
	} else if (cor.equals("vermelho")) {
	    this.cor = new Color(16711680); nomecor = "vermelho";
	} else {
	    this.cor = new Color(10027008); nomecor = "vermelho escuro";
	}
    }	

    /**
     * Altera a cor da Aresta em funcao do numero de rotas que passa por ela.
     * Entrada: Numero de rotas que passa pelo trecho
     * Saida: Aresta com cor alterada
     **/
    public void setCor(int flag) {
	if (flag == 1) {
	    switch(this.cor.getRGB()) {
		case 000000 : this.setCor("azul claro"); break;
		case 7832572 : this.setCor("azul"); break;
		case 255 : this.setCor("azul escuro"); break;
		case 197539 : this.setCor("verde claro"); break;
		case 64612 : this.setCor("verde"); break;
		case 65280 : this.setCor("verde escuro"); break;
		case 39168 : this.setCor("amarelo claro"); break;
		case 16383828 : this.setCor("amarelo"); break;
		case 16776960 : this.setCor("amarelo escuro"); break;
		case 14404612 : this.setCor("laranja claro"); break;
		case 16758095 : this.setCor("laranja"); break;
		case 16750848 : this.setCor("laranja escuro"); break;
		case 15035136 : this.setCor("vermelho claro"); break;
		case 16723245 : this.setCor("vermelho"); break;
		case 16711680 : this.setCor("vermelho escuro"); break;		 
	    }
	} else {
	    switch(this.cor.getRGB()) {
		case 7832572 : this.setCor("preto"); break;
		case 255 : this.setCor("azul claro"); break;
		case 197539 : this.setCor("azul"); break;
		case 64612 : this.setCor("azul escuro"); break;
		case 665280 : this.setCor("verde claro"); break;
		case 39168 : this.setCor("verde"); break;
		case 16383828 : this.setCor("verde escuro"); break;
		case 16776960 : this.setCor("amarelo claro"); break;
		case 14404612 : this.setCor("amarelo"); break;
		case 16758095 : this.setCor("amarelo escuro"); break;
		case 16750848 : this.setCor("laranja claro"); break;
		case 15035136 : this.setCor("laranja"); break;
		case 16723245 : this.setCor("laranja escuro"); break;
		case 16711680 : this.setCor("vermelho claro"); break;
		case 10027008 : this.setCor("vermelho"); break;		 
	    }
	}
    }

    /**
     * Devolve a cor da Aresta
     * Entrada: Nenhuma
     * Saida: Cor da Aresta
     **/
    public Color getCor() {
	return cor;
    }

    /**
     * Devolve o nome da cor
     * Entrada: Nenhuma
     * Saida: Nome da cor da aresta
     **/
    public String getNomecor() {
	return nomecor;
    }

    /**
     * Altera o atributo vertice inicial para o valor passado como parametro.
     * Entrada: Novo vertice inicial 
     * Saida: Nenhuma
     **/
    public void setVerticeInicial(Vertice Novo_Vertice) {
	verticeInicial = Novo_Vertice;
    }

    /**
     * Altera o atributo vertice final para o valor passado como parametro.
     * Entrada: Novo vertice final
     * Saida: Nenhuma
     **/
    public void setVerticeFinal(Vertice Novo_Vertice ) { 
	verticeFinal = Novo_Vertice;
    }
    
    /**
     * Devolve o atributo vertice inicial do objeto em uso.
     * Entrada: Nenhuma
     * Saida: Vertice Inicial da Aresta
     **/
    public Vertice getVerticeInicial() {
	return verticeInicial;
    }

    /**  
     * Devolve o atributo vertice final do objeto em uso.
     * Entrada: Nenhuma
     * Saida: Vertice final da Aresta
     **/ 
    public  Vertice getVerticeFinal() {
	return verticeFinal;
    }

    /**
     * Devolveo trecho equivalente desta aresta
     * Entrada: Nenhuma
     * Saida: O trecho que esta aresta desenha
     **/
    public Trecho getTrechoEquivalente() {
	return trechoEquivalente;
    }

}// fim de Aresta










