#ifndef _ARENAARRAY_H
#define _ARENAARRAY_H

#include "ball.h"
#include "randgen.h"

#define MAX_RAD 30

namespace CS128 {
	void initialize ( Ball &x ) {
		randgen rn;
	
		int radius = rn.randInt( 5, MAX_RAD );
		int r = rn.randInt( 50, 255 );
		int g = rn.randInt( 50, 255 );
		int b = rn.randInt( 50, 255 );
		if (r + g + b <= 50) {
			r += 50;
			g += 50;
			b += 50;
		}
		int pattern       = rn.randInt( 0, 3 );
		int patternRepeat = rn.randInt( 2, 6 );
		int incR = rn.randInt( 10, 255 );
		int incG = rn.randInt( 10, 255 );
		int incB = rn.randInt( 10, 255 );
	
		x = Ball( radius,
							pattern, 
							r, g, b,
							patternRepeat,
							incR, incG, incB );
	}
	
	int radius ( const Ball &x ) {
		return( x.get_radius() );
	}
	
	void display ( Ball *x, int index, int size, int delay = 1000) {
		static Ball old[10000];
		static int old_index;
		static WindowWrapper aViewer( 640, MAX_RAD *3 );
		aViewer.get_window().disableAntialiasing();
		
		int yPos = (MAX_RAD * 3) / 2;
		int distApart = MAX_RAD * 2;
		int i = 0;
	
		aViewer.get_window().drawRectangleOutline( Style(Color::BLACK), 
				distApart * old_index, 10, distApart * (old_index + 2), MAX_RAD * 3 - 10);

		aViewer.get_window().drawRectangleOutline( Style(Color::WHITE), 
				distApart * index, 10, distApart * (index + 2), MAX_RAD * 3 - 10);
		for ( i = 0; i < size; ++i ) {
			Point p( MAX_RAD + distApart * i, yPos );
			x[ i ].set_center( p );
			old[ i ].erase( aViewer);
			x[ i ].display( aViewer );
		}
		
		TimerEvent wait = aViewer.get_window().startTimer( delay );
		aViewer.get_window().waitForTimerEvent();
		aViewer.get_window().stopTimer( wait );
	
		old_index = index;
		for ( i = 0; i < size; ++i )
			old[ i ] = x[ i ];
	}
}

#endif
