// Raw-B0T, build your own bot on it

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#include "Messagetypes.h"

#define Name "RAWB0T"
#define Colour "000000 000000"

volatile double acceleration = 0.0;
volatile double robot_rotate = 0.0;
volatile double brake = 0.0;
double radar_angle, rotate, time, speed, cannon_angle, energy, coll_angle, dist;
int object, team, enemies;

message_to_robot_type name2msg(char* msg_name) {
  for (int i=0; message_to_robot[i].msg[0] != '\0'; i++) {
    if (strcmp(message_to_robot[i].msg, msg_name) == 0) return(message_to_robot_type)i;
  }
  return UNKNOWN_MESSAGE_TO_ROBOT;
}

void check_messages(int sig) {
  char msg_name[81];
  char msg_text[81];
  message_to_robot_type msg_t;

  cin.clear();
  while (!cin.eof()) {
    cin >> msg_name;
    msg_t = name2msg(msg_name);
    switch (msg_t) {
      case INITIALIZE:
        int init;
	cin >> init;
	if (init == 1) {
	  cout << "Name " << Name << endl;
	  cout << "Colour " << Colour << endl;
	}
        break;
      case DEAD:
	break;
      case GAME_FINISHES:
	break;
      case ROBOTS_LEFT:
	cin >> enemies;
   	break;
      case COLLISION:
	cin >> object >> coll_angle;
        switch (object) {
          case SHOT:
            break;
          case ROBOT:
            break;
          case COOKIE:
            break;
          case WALL:
            break;
          case MINE:
            break;
        }
	break;
      case ENERGY:
	cin >> energy;
	break;
      case ROTATION_REACHED:
	cin >> object;
	break;
      case GAME_STARTS:
	break;
      case RADAR:
	cin >> dist >> object >> radar_angle;
	switch (object) {
	  case SHOT:
	    break;
	  case ROBOT:
	    break;
	  case COOKIE:
	    break;
	  case WALL:
	    break;
	  case MINE:
	    break;
	}    
        break;	
      case INFO:
	cin >> time >> speed >> cannon_angle;
  	break;
      case ROBOT_INFO:
	cin >> energy >> team;
	break;
      default:
	break;
    }
  }
  signal(sig, check_messages);
}

int main(int argc, char * argv[]) {
  sigset_t usr1set;

  signal(SIGUSR1, check_messages);

  sigemptyset(&usr1set);
  sigaddset(&usr1set, SIGUSR1);
  sigprocmask(SIG_UNBLOCK, &usr1set, NULL);

  cout << "RobotOption " << (int)SIGNAL << " " << (int)SIGUSR1 << endl;
  cout << "RobotOption " << (int)SEND_ROTATION_REACHED << " " << (int)1 << endl;

  
  for(;;sleep(1)) {
	  
  }
  return(EXIT_SUCCESS);
}

