package gy2balls;

import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;

class BallPanel extends JPanel {

    private Thread repaintThread;
    private List<Thread> ballThreads;
    private List<Ball> balls;
    //private Rotator rotator;

    public BallPanel(JFrame f) {
        super();
        f.addKeyListener(keyListener);

        balls = new ArrayList<Ball>();
        ballThreads = new ArrayList<Thread>();
        for (int i = 0; i < 60; ++i) {
            Ball b = new Ball(f.getSize());
            balls.add(b);
            ballThreads.add(new Thread(b));
        }
        repaintThread = new Thread() {

            @Override
            public void run() {
                while (true) {
                    repaint();
                    try {
                        Thread.sleep(Main.sleepInterval);
                    } catch (InterruptedException iex) {
                    }
                }
            }
        };

    }
    //private KeyListener keyListener;
    private KeyAdapter keyListener = new KeyAdapter() {

        @Override
        public void keyPressed(KeyEvent e) {
            //System.out.println(e.getKeyChar());
            for (Ball ball : balls) {
                switch (e.getKeyChar()) {
                    case 'a':
                        ball.goLeft();
                        break;
                    case 's':
                        ball.goDown();
                        break;
                    case 'd':
                        ball.goRight();
                        break;
                    case 'w':
                        ball.goUp();
                        break;
                }
            }
        }
    };

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        for (Ball ball : balls) {
            g.drawOval(ball.getX(), ball.getY(), 10, 10);
        }
    }

    void startThreads() {
        repaintThread.start();
        for (Thread bth : ballThreads) {
            bth.start();
        }
    }
}
