package automatvgi.components;

import java.awt.Graphics;

import javax.swing.JComponent;

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


public class InitialComponent extends LineComponent{
	static DrawInitial globalDraw=new DrawInitial();
	DrawInitial specificDraw=null;
	
	private Direction direction=Direction.WEST;
	
	public InitialComponent(StateComponent st){
		state=st;
		kind=Kind.Initial;
	}
	
	public StateComponent getState(){
		return state;
	}
	
	@Override
	public void draw(Graphics g, Projection j){
		DrawInitial dt=specificDraw;
		if (dt==null) dt=globalDraw;
		dt.drawInitial(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("\\Initial");
		switch(direction){
		case WEST : 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("Initial",tab);
	}

}
