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
     **/
    private Vertice verticeInicial;

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

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


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

    /**
     * Nome da cor da aresta.
     **/
    private 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();
	vertiveInicial.setX(temp.getX());
	verticeInicial.setY(temp.getY());
	temp = TrechoEquivalente.getDestPos();
	vertiveFinal.setX(temp.getX());
	verticeFinal.setY(temp.getY());
	cor = new Color(0.0, 0.0, 0.0); // 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) {
	vertiveInicial = vinicial;
	vertiveFinal = vfinal;
	cor = new Color(0.0, 0.0, 0.0);
	nomecor = New String("preto");
    }

    /**
     * "Plota" Aresta no mapa
     * Entrada: Nenhuma
     * Saida: Desenho da aresta na tela
     **/
    public void desenharAresta() {
    }

    /**
     * Apaga Aresta do mapa
     * Entrada: Nenhuma
     * Saida: Nenhuma
     **/
    public void apagarAresta() {
    }

    /**
     * Altera a cor da Aresta para "cor" passada como parametro.
     * Entrada: nova cor da aresta
     * Saida: Nenhuma
     **/
    public void setCor(String cor) {
	switch(cor){
	    "preto" : this.cor = new Color(0.0, 0.0, 0.0); nomecor = "preto"; break;
	    "azul claro" : this.cor = new Color(0.0, 0.5, 1.0); nomecor = "azul claro"; break;
	    "azul" : this.cor = new Color(0.0, 0.250, 1.0); nomecor = "azul"; break;
	    "azul escuro" : this.cor = new Color(0.0, 0.0, 1.0); nomecor = "azul escuro"; break;
	    "verde claro" : this.cor = new Color(0.0, 1.0, 0.5); nomecor = "verde claro"; break;
	    "verde" : this.cor = new Color(0.0, 1.0, 0.250); nomecor = "verde"; break;
	    "verde escuro" : this.cor = new Color(0.0, 1.0, 0.0); nomecor = "verde escuro"; break;
	    "amarelo claro" : this.cor = new Color(0.880, 1.0, 0.0); nomecor = "amarelo claro"; break;
	    "amarelo" : this.cor = new Color(1.0, 1.0, 0.0); nomecor = "amarelo"; break;
	    "amarelo escuro" : this.cor = new Color(1.0, 0.860, 0.0); nomecor = "amarelo escuro"; break;
	    "laranja claro" : this.cor = new Color(1.0, 0.8, 0.0); nomecor = "laranja claro"; break;
	    "laranja" : this.cor = new Color(1.0, 0.650, 0.0); nomecor = "laranja"; break;
	    "laranja escuro" : this.cor = new Color(1.0, 0.575, 0.0); nomecor = "laranja escuro"; break;
	    "vermelho claro" : this.cor = new Color(1.0, 0.5, 0.0); nomecor = "vermelho claro"; break;
	    "vermelho" : this.cor = new Color(1.0, 0.250, 0.0); nomecor = "vermelho"; break;
	    "vermelho escuro" : this.cor = new Color(1.0, 0.0, 0.0); nomecor = "vermelho escuro"; break;
	}
    }	

    /**
     * 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.getNomecor()){
		"preto" : this.setCor("azul claro"); break;
		"azul claro" : this.setCor("azul"); break;
		"azul" : this.setCor("azul escuro"); break;
		"azul escuro" : this.setCor("verde claro"); break;
		"verde claro" : this.setCor("verde"); break;
		"verde" : this.setCor("verde escuro"); break;
		"verde escuro" : this.setCor("amarelo claro"); break;
		"amarelo claro" : this.setCor("amarelo"); break;
		"amarelo" : this.setCor("amarelo escuro"); break;
		"amarelo escuro" : this.setCor("laranja claro"); break;
		"laranja claro" : this.setCor("laranja"); break;
		"laranja" : this.setCor("laranja escuro"); break;
		"laranja escuro" : this.setCor("vermelho claro"); break;
		"vermelho claro" : this.setCor("vermelho"); break;
		"vermelho" : this.setCor("vermelho escuro"); break;		 
	    }
	} else {
	    switch this.getNomecor() {
		"azul claro" : this.setCor("preto"); break;
		"azul" : this.setCor("azul claro"); break;
		"azul escuro" : this.setCor("azul"); break;
		"verde claro" : this.setCor("azul escuro"); break;
		"verde" : this.setCor("verde claro"); break;
		"verde escuro" : this.setCor("verde"); break;
		"amarelo claro" : this.setCor("verde escuro"); break;
		"amarelo" : this.setCor("amarelo claro"); break;
		"amarelo escuro" : this.setCor("amarelo"); break;
		"laranja claro" : this.setCor("amarelo escuro"); break;
		"laranja" : this.setCor("laranja claro"); break;
		"laranja escuro" : this.setCor("laranja"); break;
		"vermelho claro" : this.setCor("laranja escuro"); break;
		"vermelho" : this.setCor("vermelho claro"); break;
		"vermelho escuro" : 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_Vertive;
    }

    /**
     * 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



