// Sample node agent

/*
  level 3 agents have access to extended simu object:
  {changeVisual:function(),
   chat:{..},
   clear:function(),
   createNode:function(),
   createOn:function(),
   deleteNode:function(),
   event:{..},
   get:function(),
   getNode:function(),
   getVisual:function(),
   getStats:function(),
   getSteps:function(),
   load:function(),
   log:function(),
   inspect:function(),
   model:function(),
   message:function(),
   move:function(nodeid,dx,dy,dz?),
   moveTo:function(nodeid,x,y,z?),
   network:{..},
   ofJSON:function(),
   options:{..},
   parameter:function(),
   position:function(),
   print:function(),
   save:function(),
   set:function(),
   start:function(),
   stat:function(),
   stop:function(),
   toJSON:function(),
   time:function(),
   utime:function(),
   csv:{..},
   db:{..},
   sql:{..},
   units:{..},
   phy:{..},
   simuPhy:{..}
} 
  
nodeid: node[<nodename>] !!!

*/

function (options) {
  this.location={x:options.x,y:options.y,z:options.z};
  this.mynode=none;
  this.sensor=0;
  this.child=none;
  this.parameter=options.parameter;
  
  this.act = {
    init: function () {
      this.mynode=myNode();
      log('Starting at '+this.location.x+','+this.location.y+' on node '+this.mynode);
      log('My id is '+me())
      log('My node id is '+myNode())
      log('My level is '+myLevel())
      log(negotiate('?'))
      log('My secret is '+this.parameter.mysecret)
      log('My moving direction is'+this.parameter.dir)
    },
    percept: function () {
      // get all connected nodes
      this.sensor=link(DIR.PATH('*'));
      log(this.sensor)
      // here we have pixel units!!!
      this.location=myPosition()
      log('My position is '+simu.inspect(this.location))
      // nodeid: node[<nodename>] !!!
      simu.moveTo('node['+myNode()+']',this.location.x+10,this.location.y+10)
    },
    
    service : function () {
      if (random(1,1000)>950) {
        log('deleteNode '+myNode())
        simu.deleteNode(myNode()) // nodeid only!
      }
      if (random(1,1000)>950 && this.sensor) {
        var node = random(this.sensor)
        log('sendto '+node)
        // send signal to all agents on specified node which are listening to the signal
        sendto(DIR.NODE(node),'HEYOU',random(1,100))
      }       
    },
    
    wait: function () {
      sleep(random(1,200)); // don't call sleep(0), blocks until wakeup!
    }
  }
  this.trans = {
    init: percept,
    percept: service,
    service: wait,
    wait: percept
  }
  this.on = {
    HEYOU: function (arg,fromAgent,fromNode) {
      log('Got HEYOU ('+arg+') from agent '+fromAgent+' on node '+fromNode)
    }
  }
  this.next='init';
}