#!/bin/bash

cmd=$1; shift
map=$1; shift
key=$1; shift
val=$1; shift

usage() {
  echo "Usage: $0 <list|show <map>|add <map> <key> <val>|set <map> <key> <val>|del <map> <key>>"
  exit 1
}

map_id() {
  [[ "$map" =~ ^[0-9]+$ ]] && map="#$map"
  echo $map
}

if [ -z "$cmd" ]; then
  usage
fi

case "$cmd" in
  list)
    exec haproxy-cmd show map | haproxy-pretty-table
    ;;

  show)
    if [ -z "$map" ]; then
      echo "Usage: $0 show map <map>"
      exit 2
    fi

    exec haproxy-cmd show map "`map_id`" | \
      awk -r '/.+/ { printf "%-35s %s\n", $2, $3 }'
    ;;

  add)
    if [ -z "$key" -o -z "$val" ]; then
      echo "Usage: $0 add $map <key> <val>"
      exit 2
    fi

    exec haproxy-cmd add map "`map_id`" "$key" "$val"
    ;;

  set)
    if [ -z "$key" -o -z "$val" ]; then
      echo "Usage: $0 set $map <key> <val>"
      exit 2
    fi

    exec haproxy-cmd set map "`map_id`" "$key" "$val"
    ;;

  del)
    if [ -z "$key" ]; then
      echo "Usage: $0 del $map <key>"
      exit 2
    fi

    exec haproxy-cmd del map "`map_id`" "$key"
    ;;

  *)
    usage
    ;;

esac
