package graphics;

import scheme.lib.htdp.image;
import scheme.lib.graphics.graphics;
import scheme.lib.htdch.graphics.rename;

public class Image {
  dynamic theImage;

  Image( dynamic i ) {
    this.theImage = i;
  }
  
  dynamic getBitmap() {
    return theImage.getBitmap();
  }

  public Image movePinhole( Posn p ) {
    return new Image( image.movePinhole(theImage, p.x, p.y) );
  }

  public Image putPinhole( Posn p ) {
    return new Image( image.putPinhole(theImage, p.x, p.y) );
  }

  public Image overlay( Image i ) {
    return new Image( image.overlay( theImage, i.theImage ) );
  }

  public Image overlayXY( Image i, Posn p) {
    return new Image( rename.overlayXY( theImage, p.x, p.y, i.theImage));
  }

  public Posn getPinhole() {
    return new Posn( image.pinholeX(theImage),image.pinholeY(theImage) );
  }

  public boolean inside( Image isInside ) {
    return image.imageInsideP( theImage, isInside.theImage );
  }

  public Posn find( Image inside ) {
    dynamic position = image.findImage(theImage, inside.theImage );
    return new Posn( graphics.posnX(position), graphics.posnY(position) );
  }

  public Image addLine(Posn start, Posn end, Color c) {
    return new Image(image.addLine(theImage, start.x, start.y, end.x, end.y, c.toString()));
  }

  public int width() {
    return image.imageWidth( theImage );
  }

  public int height() {
    return image.imageHeight( theImage );
  }

  public boolean equals(Object o) {
     return (o instanceof Image) && rename.imageEqP(theImage,((Image) o).theImage);
  }

}