#!/usr/bin/perl

# /* LICENSE:
#   =========================================================================
#     CMPack'04 Source Code Release for OPEN-R SDK 1.1.5-r2 for ERS7
#     Copyright (C) 2004 Multirobot Lab [Project Head: Manuela Veloso]
#     School of Computer Science, Carnegie Mellon University
#     All rights reserved.
#   ========================================================================= */

use Getopt::Long;

$usage = "usage: hostgw_setup <robot id list>
options:
-r|--robots <robot id list> configure HOSTGW.conf for these robots
-d|--dogroot <root>         set root directory to use
-h|--help                   get help
";

my $help=0;
my $dogroot="default";
my $conf_dir="";
my $robots=0;
my @robot_ids=();
my @active_ids=(0,0,0,0,0,0,0,0,0);

################################

####### ports #########
my $proxy_port = 1080;
my $base_listen_port = 1040;
my $base_send_port = 1020;

####### ips ########

@ips=(
"192.168.16.1", #ers01
"192.168.16.2", #ers02
"192.168.16.3", #ers03
"192.168.16.4", #ers04
"192.168.16.5", #ers05
"192.168.16.6", #ers06
"192.168.16.7", #ers07
"192.168.16.8"  #ers08
);
###############################

my %opts=
  (
   'robots|r:s' => \$robots,
   'help|h' => \$help,
   'dogroot|d:s' => \$dogroot,
  );

Getopt::Long::Configure("bundling");

GetOptions(%opts) || die $usage;

if($dogroot eq "default") {$dogroot=$ENV{"DOGROOT"}} 
#$conf_dir = append($dogroot,"../util/InterRobotComm/RP/host/MS/OPEN-R/MW/CONF/"); #location of HOSTGW.CONF
  
@robot_ids = split /,/, $robots;
foreach $id (@robot_ids){
  if($id[0] eq 0){
    $id = substr($ids, 1, 2); #get rid of the leading '0'
  }
  @active_ids[$id] = 1; #set 1 for active robots
}

chdir "$conf_dir" || die "invalid config file directory\n";

print "config file in $conf_dir\n";
print "dogroot=$dogroot robot_ids=";
foreach $id (@robot_ids){
  print "ers$id ";
}
printf "\n";

if($help) {
  print $usage;
  exit(0);
}


open(HOSTGW_OUT,">HOSTGW.CONF");
$i = 0;
foreach $ip (@ips){
  $i++;
  printf HOSTGW_OUT  "# ers0$i.wv.cs.cmu.edu = %s\n",$ip;
}
  
printf HOSTGW_OUT  "\n";

$i = 0;
foreach $ip (@ips){
  $i++;
  printf HOSTGW_OUT  "# ers0$i\n";

  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "!ROBOT_PROXY\t\t\t$proxy_port\t$ip\n";
}
$i = 0;

printf HOSTGW_OUT  "\n\n# OPEN-R Service Name\t\t\tport\thost\n";

foreach $ip (@ips){
  $i++;
  printf HOSTGW_OUT  "# ERS0$i\n";

  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetInputERS0$i\MainFromOne.CHAR.O\t%d\t%s\n",$base_listen_port+0,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetInputERS0$i\MainFromTwo.CHAR.O\t%d\t%s\n",$base_listen_port+1,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetInputERS0$i\MainFromThree.CHAR.O\t%d\t%s\n",$base_listen_port+2,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetInputERS0$i\MainFromFour.CHAR.O\t%d\t%s\n",$base_listen_port+3,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetInputERS0$i\MainFromFive.CHAR.O\t%d\t%s\n",$base_listen_port+4,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetInputERS0$i\MainFromSix.CHAR.O\t%d\t%s\n",$base_listen_port+5,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetInputERS0$i\MainFromSeven.CHAR.O\t%d\t%s\n",$base_listen_port+6,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetInputERS0$i\MainFromEight.CHAR.O\t%d\t%s\n",$base_listen_port+7,$ips[$i-1];

  
  printf HOSTGW_OUT  "\n";

  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}  
  printf HOSTGW_OUT  "TCPGateway.NetOutputERS0$i\MainToOne.CHAR.S\t%d\t%s\n",$base_send_port+0,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetOutputERS0$i\MainToTwo.CHAR.S\t%d\t%s\n",$base_send_port+1,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetOutputERS0$i\MainToThree.CHAR.S\t%d\t%s\n",$base_send_port+2,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetOutputERS0$i\MainToFour.CHAR.S\t%d\t%s\n",$base_send_port+3,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetOutputERS0$i\MainToFive.CHAR.S\t%d\t%s\n",$base_send_port+4,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetOutputERS0$i\MainToSix.CHAR.S\t%d\t%s\n",$base_send_port+5,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetOutputERS0$i\MainToSeven.CHAR.S\t%d\t%s\n",$base_send_port+6,$ips[$i-1];
  if(!$active_ids[$i]){printf HOSTGW_OUT  "#";}
  printf HOSTGW_OUT  "TCPGateway.NetOutputERS0$i\MainToEight.CHAR.S\t%d\t%s\n",$base_send_port+7,$ips[$i-1];

  
  printf HOSTGW_OUT  "\n";
}

close(HOSTGW_OUT);

