import javax.swing.JApplet;
import java.awt.Graphics;
import java.util.ArrayList;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class Driver extends JApplet implements MouseListener {
  private ArrayList<Shape> figures;

  public void init() {
    addMouseListener(this);
    figures = new ArrayList<Shape>();
    Shape s1 = new Circle(20, 20, 10);
    figures.add(s1);
    Shape s2 = new Circle(20, 30, 10);
    figures.add(s2);
    Shape s3 = new Circle(30, 30, 10);
    figures.add(s3);
    Shape s4 = new Circle(30, 20, 10);
    figures.add(s4);
    Shape s5 = new Circle(30, 24, 15);
    figures.add(s5);
    Shape s6 = new Circle(60, 24, 15);
    figures.add(s6);
    Shape s7 = new Circle(90, 44, 15);
    figures.add(s7);
    paintRandomDots(100, getSize().width - 1, getSize().height - 1);
  }

  public void mouseClicked(MouseEvent e) {
    int x = e.getX();
    int y = e.getY();
    Dot d = new Dot(x, y);
    d.setColor(0, 0, 0);
    figures.add(d);
    this.repaint();
  }
  public void mouseEntered(MouseEvent e) {}
  public void mouseExited(MouseEvent e) {}

  public void paint(Graphics g) {
    g.drawRect(0, 0, 
        getSize().width - 1,
        getSize().height - 1);
    for (Shape s : figures) {
      s.draw(g);
    }
  }

  public void paintRandomDots(int numPoints, int maxX, int maxY) {
    for (int i = 0; i < numPoints; i++) {
      int x = (int)(Math.random() * maxX);
      int y = (int)(Math.random() * maxY);
      Dot d = new Dot(x, y);
      d.setColor(0, 0, 0);
      figures.add(d);
    }
  }

  private int cx = 0, cy = 0;
  public void mousePressed(MouseEvent e) {
    this.cx = e.getX();
    this.cy = e.getY();
  }
  public void mouseReleased(MouseEvent e) {
    int newX = e.getX();
    int newY = e.getY();
    if (cx > newX) {
      int aux = cx;
      cx = newX;
      newX = aux;
    }
    if (cy > newY) {
      int aux = cy;
      cy = newY;
      newY = aux;
    }
    Rectangle r = new Rectangle(cx, cy, newX - cx, newY - cy);
    this.cx = 0;
    this.cy = 0;
    figures.add(r);
    repaint();
  }

}
