package v6.apps.zelvak;

public class InitialState extends AbstractState {

	private final StringBuilder nameBuilder = new StringBuilder(); 
	
	private boolean identifierCanContinue = true;

	public InitialState() {
		super(new ParsingContext());
	}
	
	public InitialState(State state, ParsingContext context) {
		super(state, context);
	}

	@Override
	public State process(char c) throws WTFException {
		if(Character.isWhitespace(c)){
			if(nameBuilder.length()>0){
				identifierCanContinue = false;
			}
			return this;
		}else if((c >= 'a') && (c <= 'z')){
			if(!identifierCanContinue){
				throw new WTFException("Expected \"(\", letter found");
			}
			nameBuilder.append(c);
			return this;
		}else if( c == '('){
			final String name = nameBuilder.toString();
			nameBuilder.setLength(0);
			return new FunctionCallState(this, name, context);
		}else if(c == '}' && parent != null){
			return parent.process(c);
		}else{
			throw new WTFException("Unrecognized character.");
		}
	}

}
