
import java.awt.*;
import java.io.*;       //   NEW, for files


public class GlobalOptStats
        {
		private int popsize;
 		private int [][] stats = new int[4][4];

 		private int north_boundary;
 		private int west_boundary;
 		private int substrate_width;
 		private int substrate_height;
 		private int piece_size;

 		private int left;
 		private int top;
 		private int piece_pixel_size;
 		private int piece_radius;

 		private PrintWriter outfile;

 		public GlobalOptStats(int nb, int wb, int sw, int sh, int ps)
 		  {
			north_boundary = nb;
			west_boundary = wb;
			substrate_width = sw;
			substrate_height = sh;
			piece_size = ps;

			left = west_boundary;
			top = north_boundary;
			piece_pixel_size = piece_size;
			piece_radius = piece_pixel_size/2;

			try
				 {
					outfile = new PrintWriter(new FileOutputStream("globalCounts.txt"));
				  }
			 	catch (Throwable anError)
			 	  {
					System.out.println("outfile error>  " + anError); // display the error
				  }

			System.out.println("piece_pixel_size = " + piece_pixel_size);
			System.out.println("piece_radius = " + piece_radius);
			outfile.println("piece_pixel_size = " + piece_pixel_size);
			outfile.println("piece_radius = " + piece_radius);

	      }

		public void update(Shape [] pop)
		   {
			for(int i = 0; i < 4; i++)
			    for(int j=0; j<4; j++)
			       stats[i][j]=0;
			int x; int y;
			popsize = pop.length;
			for(int i = 0; i<popsize; i++)
			   {
				   x = pop[i].get_center_x();
				   y = pop[i].get_center_y();
				   for(int r=0; r < 4;r++)
				       for(int c=0; c<4; c++)
				   			if(x == left + c * piece_pixel_size + piece_radius  &&
				   			   y == top + r * piece_pixel_size + piece_radius)
				   			   stats[r][c]++;
				}


		   }

	 	public void print(int gen)
	 	  {

	/*
			  for(int i = 0; i < 4; i++)
			    {
			      for(int j=0; j< 4; j++)
			         System.out.print("("+(left + j * piece_pixel_size + piece_radius) +","+
			         					(top + i * piece_pixel_size + piece_radius) + ") \t\t");
			      System.out.print("\n");
			    }

	*/
			  int sum = 0;
			  for(int i = 0; i < 4; i++)
			    {
   		  	      System.out.println(stats[i][0] + "\t\t" +
			  					     stats[i][1] + "\t\t" +
			  					     stats[i][2] + "\t\t" +
			  					     stats[i][3]);
			      for(int j = 0; j < 4; j++)  sum+= stats[i][j];
			    }

			  System.out.println(" Total number of globals:  " + sum);

			  //  Also print to file
			  try
			  	{
					outfile.println("Generation " + gen);
					sum = 0;
					for(int i = 0; i < 4; i++)
						{
					   		outfile.println(stats[i][0] + "\t\t" +
								  	        stats[i][1] + "\t\t" +
								  		    stats[i][2] + "\t\t" +
								  		    stats[i][3]);
							for(int j = 0; j < 4; j++)  sum+= stats[i][j];
						}

					outfile.println(" Total number of globals:  " + sum);
			  	}
			  	catch (Throwable anError)
			  		{System.out.println("outfile error>  " + anError); }// display the error
			}

		public void close()
		   {outfile.close();}


        }

