import java.applet.*;
import java.awt.*;

public class BridgeCanvas extends Canvas {
  Dimension offDimension;
  Image offImage;
  Graphics offGraphics;
  int rowSize, colSize;
  int topLeftOff;
  int boardSize;
  Point pt;

  Dimension minSize;

  public Dimension getSize()
  {
    return getPreferredSize();
  }

  public Dimension getPreferredSize() {
    return getMinimumSize();
  }

  public synchronized Dimension getMinimumSize() {
    return minSize;
  }

  public BridgeCanvas() {
    offGraphics = null;
    rowSize = (Bridges.MAXSCREENY - 10) / Bridges.MAXROWS;
    colSize = (Bridges.MAXSCREENY - 10) / Bridges.MAXCOLS;
    topLeftOff =  10;
    boardSize = rowSize * Bridges.MAXROWS;
    minSize = new Dimension(Bridges.MAXSCREENX, Bridges.MAXSCREENY);
  }

  public boolean mouseDown(Event evt, int x, int y)
  { int r, c;

    if (pt == null)
       pt = new Point(x, y);
    else
    { pt.x = x;
      pt.y = y;
    }
    r = (pt.y - topLeftOff) / rowSize;
    c = (pt.x - topLeftOff) / colSize;
    if ((r >= 0) && (r < Bridges.MAXROWS))
    { if ((c >= 0) && (c < Bridges.MAXCOLS))
      { if ((!Bridges.blueWins) && (!Bridges.redWins))
        { if (Bridges.toggleBox(r, c))
          { repaint();
            if (!Bridges.redWins)
            { Bridges.findBestMove();
              // if (!Bridges.blueWins)
              // {  Bridges.statusMsg.setText("Row: " + r + "Col: " + c);
    } } } } } // }
    return true;
  }

  public void paint(Graphics g) {
    update(g);
  }

  public void update(Graphics g)
  {
    int r, c;
    Dimension d = getSize();

    if ( (offGraphics == null)
      || (d.width != offDimension.width)
      || (d.height != offDimension.height) )
    { offDimension = d;
      offImage = createImage(d.width, d.height);
      offGraphics = offImage.getGraphics();
    }

//    offGraphics.setColor(getBackground());
    offGraphics.setColor(Color.white);
    offGraphics.fillRect(0,0,d.width-1,d.height-1);
    offGraphics.setColor(Color.black);
    offGraphics.drawRect(topLeftOff-2, topLeftOff-2, boardSize+4,boardSize+4);


    if (Bridges.board != null)
    { for (r = 0; r < Bridges.MAXROWS; r++)
      { for (c = 0; c < Bridges.MAXCOLS; c++)
        { if (Bridges.board[r][c] == Bridges.BLUETOWER)
          { offGraphics.setColor(Color.blue);
            offGraphics.fillRect(topLeftOff +c*colSize,topLeftOff +r*rowSize,colSize,rowSize);
          }
          else
          { if (Bridges.board[r][c] == Bridges.REDTOWER)
            { offGraphics.setColor(Color.red);
              offGraphics.fillRect(topLeftOff + c*colSize,topLeftOff + r*rowSize,colSize,rowSize);
      } } } }
      g.drawImage(offImage, 0, 0, this);
  } }
}
