package uk.co.patrickhaston.mars;

public class MarsPeople extends MarsLocatedObjects 
{
  // Contents
  
  public MarsPeople(MarsModel model)
  {
    super(model);
    this.CollectionName = "[People]";
  }

  public void readData(String line)
  {
    int idx = readIndex(line);
    if (idx>0)
    {
      MarsPerson p = new MarsPerson(line);
/*
      p.name = readString(line, 0);
      p.settlement = readInteger(line, 1);
      for (int i=0; i<7; i++)
      {
        p.activity[i] = readInteger(line, 2+i);
      }
      p.role = readInteger(line, 9);
      p.resourcesOwned = readInteger(line, 10);
      p.currentStep = readInteger(line, 11);
      double latitude = readDouble(line, 12);
      double longitude = readDouble(line, 13);
      p.location = new LatLong(latitude, longitude);
      p.personality = readString(line, 14);
      p.mood = readInteger(line, 15);
*/
      this.setElementAt(p, idx);
    }
  }

  public void model()
  {
    //int day = 0;
    for ( int i = 1; i < this.size(); i++)
    {
      ((MarsPerson) this.elementAt(i)).update(theModel, i);
/*
      MarsPerson p = new MarsPerson( (MarsPerson) this.elementAt(i));
      switch (theModel.gameDate.get(theModel.gameDate.DAY_OF_WEEK))
      {
        case theModel.gameDate.MONDAY: day = 0; break;
        case theModel.gameDate.TUESDAY: day = 1; break;
        case theModel.gameDate.WEDNESDAY: day = 2; break;
        case theModel.gameDate.THURSDAY: day = 3; break;
        case theModel.gameDate.FRIDAY: day = 4; break;
        case theModel.gameDate.SATURDAY: day = 5; break;
        case theModel.gameDate.SUNDAY: day = 6; break;
      }
      if (p.activity[day] == 0)
      {
        if( day < theModel.workingWeek)
        {
          // it is a working day - do whatever they were doing yesterday
          // Alert the player that they have finished their current job
          theModel.messageFrom("What should I do next?", i);
        }
        else
        {
          // choose an activity for themselves
          MarsActivity a = new MarsActivity();
          a.setSettlementId(0);
          MarsGoal g = new MarsGoal(theModel.Goals.nextStep(p.role, p.currentStep));
          p.currentStep++;
          p.activity[day] = theModel.Activities.startNewActivity(g.activity, g.special, i, 0);
            
        } // end of test for working week
      }
      // do this activity
      theModel.Activities.modelActivity(p.activity[day]);
      this.setElementAt(p, i);
*/   
    }
    
  }

  public void startNewActivity(int p, int a, int s)
  {
    if(p<this.size() || p<1)
    {
      if(a<theModel.Activities.size() || a<1)
      {
        MarsPerson person = new MarsPerson((MarsPerson) this.elementAt(p));
        int newActivity = 0;
        for (int i=0; i<7; i++)
        {
          if(person.getActivity(i) == 0)
          {
            if(newActivity == 0)
            {
              newActivity = theModel.Activities.startNewActivity(a, s, p, person.getSettlement() );
              theModel.messageFrom("New activity started.  Activity no " + newActivity, p);
            }
            ((MarsPerson) this.elementAt(p)).setActivity(i, newActivity);
          }
        }
      }
      else
      {
        theModel.messageFrom("MarsPeople.startNewActivity: activity outside range.", p);
      }
    }
    else
    {
      theModel.systemMessage("MarsPeople.startNewActivity: person outside range.");
    }
  }

  public int getStoredResources(int personId)
  {
    if (personId > this.size()) return 0;
    if (personId < 1) return 0;
    return ((MarsPerson) elementAt(personId)).getStoredResources();
  }
  
  public void activityStopped(int personId, int activityId)
  {
    if (personId > this.size()) return;
    if (personId < 1) return;
    ((MarsPerson) elementAt(personId)).activityStopped(activityId);
  }

  public int getFaceId(int personId)
  {
    if (personId > this.size()) return 0;
    if (personId < 1) return 0;
    return ((MarsPerson) elementAt(personId)).getFaceId();
  }

  public int getNameId(int personId)
  {
    if (personId > this.size()) return 0;
    if (personId < 1) return 0;
    return ((MarsPerson) elementAt(personId)).getNameId();
  }
  
  public int getMood(int personId)
  {
    if (personId > this.size()) return 0;
    if (personId < 1) return 0;
    return ((MarsPerson) elementAt(personId)).getMood();
  }
}
