import java.awt.*;
import java.awt.image.ImageObserver;

public class DogSprite extends Sprite {
	private int dir = -1;
	private int wait = 0;

	public DogSprite( int dir, Image image, int x, int y ) {
		super( image, x, y );
		this.dir = dir;
	}
	

	public void tick( Level level ) {
		wait--;
		if ( wait > 0 ) return;
		super.tick( level );

		if ( getState() == REST ) {

			if ( Math.random() < 0.7 ) {
				int dir = level.sniff( getX(), getY() );
				//wait = 12;
				if ( dir != -1 ) {
					if ( this.dir != dir )
						wait = 12;
					this.dir = dir;
				}
			}
 
			switch( this.dir ) {
				case UP:    goUp();    break;
				case DOWN:  goDown();  break;
				case LEFT:  goLeft();  break;
				case RIGHT: goRight(); break;
			}

			if (   getState() == REST ) // something was in the way
				turn();	
		}
	}

	private boolean isSpace( int dir ) {
		int x = getX();
		int y = getY();
		int s = Level.ELEMENT_SIZE;
		switch( dir ) {
			case UP:    return level.isSpace( x,   y-s );
			case DOWN:  return level.isSpace( x,   y+s );
			case LEFT:  return level.isSpace( x-s, y );
			case RIGHT: return level.isSpace( x+s, y );
		}
		return false;
	}

	private void turn() {
		int l = turnLeft();
		if ( isSpace( l ) )
			dir = l;
		else
			dir = turnRight();
	}

	private int turnLeft() {
		switch( dir ) {
			case UP:    return LEFT;  
			case DOWN:  return RIGHT; 
			case LEFT:  return DOWN;  
			case RIGHT: return UP;    
		}
		return dir;
	}

	private int turnRight() {
		switch( dir ) {
			case UP:    return RIGHT;
			case DOWN:  return LEFT;
			case LEFT:  return UP;  
			case RIGHT: return DOWN;
		}
		return dir;
	}

	private static final Font f = new Font( "SanSerif", Font.PLAIN, 10 );
	private static Rectangle s = new Rectangle( -1, -1 );

	public void paint( Graphics g, ImageObserver o ) {
		super.paint( g, o );
		if ( wait > 0 ) {
			String str = "woof!";
			g.setFont( f );
			if ( s.width == -1 ) {
				FontMetrics fm = g.getFontMetrics();
				s.width = fm.stringWidth( str );
				s.height = fm.getHeight();
				s.y = fm.getAscent();
			}
			int x = 4 + getX();
			int y = getY();

			g.setColor( Color.white );
			g.fillRect( x, y -1 - s.y, s.width, s.height+1 );
			g.setColor( Color.black );
			g.drawString( str, x, y );
		}
	}
}