
// Copyright (c) 2004 
package uk.co.patrickhaston.mars;

import uk.co.patrickhaston.pdhdata.PdhData;
import uk.co.patrickhaston.pdhdata.PdhError;


/**
 * MarsActivities extends MarsArray to hold a collection of MarsActivity classes
 * <P>
 * @author Patrick Haston
 */
public class MarsActivities extends MarsArray
{

  /**
   * Constructor
   */
  public MarsActivities(MarsModel model)
  {
    super(model);
    this.CollectionName = "[Activities]";
  }

  public void readData(String line)
  {
    int idx = readIndex(line);
    if (idx>0)
    {
      MarsActivity a = new MarsActivity(theModel, line);
      this.setElementAt(a, idx);
    }
  }

  public void modelActivities()
  {
    if(inRange(1))
    {
      for (int i=1; i<size(); i++)
      {
        MarsActivity a =  (MarsActivity) this.get(i);
        if(a != null) a.updateActivity(theModel);
      }
    }
  }

  public void modelActivity(int i)
  {
    MarsActivity a =  (MarsActivity) this.get(i);
    if(a != null)
    {
      a.updateActivity(theModel);
      // if the activity is complete then we can remove it from the system
      if (a.getStatus() == a.COMPLETE)
      {
        theModel.systemMessage("Telling people to stop activity " + i);
        int participants[] = a.getPeopleId();
        if (participants != null)
        {
          for (int p=0; p<participants.length; p++)
          {
            theModel.People.activityStopped(participants[p], i);
            theModel.systemMessage("Telling person " + participants[p] + " to stop activity " + i);
          }
        }
        int equipment[] = a.getEquipment();
        if (equipment != null)
        {
          for (int p=0; p<equipment.length; p++)
          {
            theModel.Constructions.activityStopped(equipment[p], i);
          }
        }
        this.setElementAt(null, i);
      }
    }
  }

  public int startNewActivity(int activityType, int special, int leader, int settlement)
  {
    try
    {
      int i = this.getEmptyElement();
      MarsActivity a = new MarsActivity(i, activityType, special, leader, settlement, theModel);
      a.setStatus(a.IN_PROGRESS);
      return this.addData((PdhData) a);
    }
    catch (Exception e)
    {
      System.out.println("Error encountered in MarsActivities.startNewActivity()." +
        " activityType=" + activityType + " special=" + special + " leader=" + leader +
        " settlement=" + settlement + ".  Error: " + e.getMessage() );
    }
    return PdhError.UNDEFINED_ERROR;
  }
  
  public int getStatus(int activityId)
  {
    if(activityId < 1 || activityId >= size() ) return 0;
    return ((MarsActivity) get(activityId)).getStatus();
  }
}


