#!/bin/bash
cd "$(dirname "$(readlink -f "$0")")"
mac=52:54:00:`openssl rand -hex 1`:`openssl rand -hex 1`:`openssl rand -hex 1`
subnet="172.16.99"
ip=generate

ssh_key_dir="../../../identity_files/"
dhcp_dir="../../../dhcp_files"

usage="$(basename "$0") [options] server_name
where:
    -m mac_addr     Specify mac address to use - if not specified, will use 52:54:00:*:*:*
    -s subnet       Subnet to place server on (default to 172.16.99.xx)
    -i ip_address   Specify IP address to assign (default to next available in subnet)"

# process flags
while getopts "h:m:s:i" flag
do
  case "$flag" in
    m) mac=${OPTARG};;
    s) subnet=${OPTARG};;
    i) ip=${OPTARG};;
    h) ;&
    *) echo "$usage";exit;;
  esac
done

# get name
shift $(($OPTIND - 1)) 
if [ $# -eq 0 ];then echo "Server name undefined";echo "$usage";exit;else name=$1;fi

lname=`echo $name | tr '[:upper:]' '[:lower:]'`

# remove any existing entries for hostname
for f in $dhcp_dir/subnets/*
do
  sed -i "/\t$lname\$/d" $f
done

# determine next available ip in subnet (if not provided)
if [[ "$ip" -eq "generate" ]];then
  if [ -f "$dhcp_dir/subnets/$subnet" ]
  then
    array=(`awk 'match($0,/'$subnet'\.[0-9]+/){print substr($0, RSTART, RLENGTH)}' $dhcp_dir/subnets/$subnet | awk 'match($0,/[0-9]+$/){print substr($0, RSTART, RLENGTH)}' | sort -n`)
    for (( i = 2;i < 255;i++));do
      if [[ ! " ${array[*]} " =~ [[:space:]]${i}[[:space:]] ]]; then
        break;
      fi
    done
    ip="${subnet}.$i"
  else
    ip="${subnet}.2"
  fi
else
  subnet=`echo $ip | grep -Po "\d+\.\d+\.\d+"`
fi
touch $dhcp_dir/subnets/$subnet

# add dhcp info to file
echo "$ip	$mac	$name" | cat $dhcp_dir/subnets/$subnet - | sort -t . -k 3,3n -k 4,4n > /tmp/$subnet
cp /tmp/$subnet $dhcp_dir/subnets/$subnet

# build dhcp
./build_dhcp.sh > /tmp/dhcp

# copy dhcp file to router
scp -i $ssh_key_dir/id_router -O /tmp/dhcp r.actcur.com:/etc/config/dhcp
# remove active leases for ip
ssh -i $ssh_key_dir/id_router r.actcur.com "sed -i '/$ip/d' /tmp/dhcp.leases"
# restart dnsmasq
ssh -i $ssh_key_dir/id_router r.actcur.com 'service dnsmasq restart'