import java.awt.Color;

public class SimBean
{
   public SimBean()
   {
      environment = new BoundedEnv(10, 10);
      addFish(5, 5, null);
      addFish(3, 3, Color.blue);
      addFish(3, 7, Color.red);
      addFish(7, 3, Color.green);
      addFish(7, 7, Color.yellow);
      simulation = new Simulation(environment, dummyDisplay);      
   }

   public void addFish(int row, int column, Color c)
   {
      Fish fish;
      Location location = new Location(row, column);
      if (c == null) 
         fish = new Fish(environment, location);
      else
         fish = new Fish(environment, location, environment.randomDirection(), c);
      if (environment.isEmpty(location))
         environment.add(fish);
   }

   public void reset(int rows, int columns)
   {
      environment = new BoundedEnv(rows, columns);
      simulation = new Simulation(environment, dummyDisplay);      
   }

   public StringBuffer getHTML()
   {
      StringBuffer b = new StringBuffer();
      b.append("<table border=\"1\">");
      for (int i = 0; i < environment.numRows(); i++)
      {
         b.append("<tr>");
         for (int j = 0; j < environment.numCols(); j++)
         {
            b.append("<td width=\"44\" height=\"44\">");
            Location location = new Location(i, j);
            Object obj = environment.objectAt(location);
            if (obj instanceof Fish)
            {
               Fish fish = (Fish)obj;
               b.append("<img src=\"fish_");
               b.append(colorName(fish.color()));
               b.append("_");
               b.append(fish.direction().toString());
               b.append(".gif\"/>");
            }
            else
               b.append("&nbsp;");
            b.append("</td>");
         }
         b.append("</tr>");
      }
      b.append("</table>");      
      return b;
   }

   public static String colorName(Color c)
   {
      if (c.equals(Color.blue)) return "blue";
      else if (c.equals(Color.red)) return "red";
      else if (c.equals(Color.yellow)) return "yellow";
      else if (c.equals(Color.green)) return "green";
      else return "color";
   }

   public void step()
   {
      simulation.step();
   }

   private Environment environment;
   private Simulation simulation;
   private EnvDisplay dummyDisplay = new 
      EnvDisplay()
      {
         public void showEnv() {}
      };
}
