package automatvgi.components;

import java.awt.Graphics;

import javax.swing.JComponent;

import automatvgi.Direction;
import automatvgi.LatexColor;
import automatvgi.Projection;
import automatvgi.drawing.DrawFinal;
import automatvgi.edit.DirectionChooser;
import automatvgi.edit.Edit;
import automatvgi.edit.LineColorChooser;
import automatvgi.tools.Point;
import automatvgi.tools.Vector;


public class FinalComponent extends LineComponent{
	private static DrawFinal globalDraw=new DrawFinal();
	private DrawFinal specificDraw=null;
	private Direction direction = Direction.EAST;
	
	public FinalComponent(StateComponent st){
		state=st;
		kind=Kind.Final;
	}
	
	public StateComponent getState(){
		return state;
	}
	
	@Override
	public void draw(Graphics g, Projection j){
		DrawFinal dt=specificDraw;
		if (dt==null) dt=globalDraw;
		dt.drawFinal(this,g,j);
	}
	
	@Override
	public String toString(){
		StringBuilder dir=new StringBuilder();
		boolean modifColor=getLineColor()!=LatexColor.getColorByName("Black");
		if(modifColor){
			dir.append("\\ChgEdgeLineColor{"+getLineColor()+"}\n");
		}
		dir.append("\\Final");
		switch(direction){
		case EAST : break;
		default : dir.append("["+direction.initials()+"]");
		}
		dir.append("{S"+state.getId()+"}\n");
		if(modifColor){
			dir.append("\\RstEdgeLineColor\n");			
		}
		return dir.toString();
	}

	@Override
	public Point handle(){
		Vector v=new Vector(2,0);
		v.rot(-direction.angle());
		return state.getCenter().addTo(v);
	}

	@Override
	public Direction getDirection() {
		return direction;
	}

	@Override
	public void setDirection(Direction d) {
		direction=d;
	}

	@Override
	public void edit() {
		JComponent[] tab={new LineColorChooser(this), new DirectionChooser(this)};
		new Edit("Final",tab);
	}
}
