// This program was written by LFW to serve as a mystery program
// for ES 20/CS 14.

// Modified by Scot Drysdale and Tom Cormen to use for CS 5.
// Later modified by Scot Drysdale for CS 10. (We like to re-use code!)
// 
// Since this is designed to be a mystery program, it has no
// constructive comments. Notice that it is very hard to read!
// Do not use this as an example of a "good program"!!!!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Scanner;

public class Mystery extends JFrame implements WindowListener {
  private static final long serialVersionUID = 1L;
  public static final int WIDTH = 450;
  public static final int HEIGHT = 350;
  public static final int OVALWIDTH = 120;
  public static final int OVALHEIGHT = 60;
  public static final int HALFOVALWIDTH = OVALWIDTH / 2;
  public static final int HALFOVALHEIGHT = OVALHEIGHT / 2;
  public static final int RGBMAX = 255;

  public static void main(String[] args) {
    String name;
    System.out.print("Please enter your name followed by enter or return: ");
    Scanner input = new Scanner(System.in);
    name = input.nextLine();
    input.close();

    Mystery myWindow = new Mystery(name);
    myWindow.setVisible(true);
  }

  public Mystery(String name) {
    addWindowListener(this);
    setTitle("Close this window to exit, " + name);
    setSize(WIDTH, HEIGHT);
    setBackground(Color.black);
  }

  public void paint(Graphics g) {
    final int XMOD1 = 17;
    final int YMOD1 = 28;
    final int XMOD2 = 40;
    final int YMOD2 = 45;

    int baseX, baseY;
    int baseR, baseG, baseB;

    Font newFont = new Font("Helvetica", 1, 15);
    g.setFont(newFont);

    for (int i = 0; i < 500; i++) {
      baseX = (int) (Math.random() * WIDTH) - HALFOVALWIDTH;
      baseY = (int) (Math.random() * HEIGHT) - HALFOVALHEIGHT;
      baseR = (int) (Math.random() * RGBMAX);
      baseG = (int) (Math.random() * RGBMAX);
      baseB = (int) (Math.random() * RGBMAX);
      g.setColor(new Color(baseR, baseG, baseB));
      g.fillOval(baseX, baseY, OVALWIDTH, OVALHEIGHT);
      g.setColor(new Color(RGBMAX - baseR, RGBMAX - baseG, RGBMAX - baseB));
      g.drawString("Welcome to", baseX + XMOD1, baseY + YMOD1);
      g.drawString("CS 10", baseX + XMOD2, baseY + YMOD2);
    }
    g.setColor(Color.red);
    baseX = WIDTH / 2 - HALFOVALWIDTH;
    baseY = HEIGHT / 2 - HALFOVALHEIGHT;
    g.fillOval(baseX, baseY, OVALWIDTH, OVALHEIGHT);
    g.setColor(Color.white);
    g.drawString("Welcome to", baseX + XMOD1, baseY + YMOD1);
    g.drawString("CS 10", baseX + XMOD2, baseY + YMOD2);
  }

  public void windowOpened(WindowEvent e) {
  }

  public void windowClosing(WindowEvent e) {
    this.dispose();
    System.exit(0);
  }

  public void windowClosed(WindowEvent e) {
  }

  public void windowIconified(WindowEvent e) {
  }

  public void windowDeiconified(WindowEvent e) {
  }

  public void windowActivated(WindowEvent e) {
    repaint();
  }

  public void windowDeactivated(WindowEvent e) {
  }
}