#!/bin/bash

TEMP_D=""
REQUIRED="EC2_CERT EC2_PRIVATE_KEY EC2_USER_ID EC2_ACCESS_KEY EC2_SECRET_KEY
   REGIONS BUCKET_BASE ARCH"

error() { echo "$@" 1>&2; }
fail() { [ $# -eq 0 ] || error "$@"; exit 1; }

cleanup() {
   if [ "${DRY_RUN:-0}" = "0" ]; then
     if [ -n "$CLEAN_DEREGISTER" ]; then
       set -- $CLEAN_DEREGISTER
       error "deregistering $2 in region $1"
       ec2-deregister --region "$1" $XKEY_ARGS "$2" ||
         error "failed to deregister $1:$2"
     fi

     if [ -n "$CLEAN_DELETE_BUNDLE_2" ]; then
       set -- ${CLEAN_DELETE_BUNDLE_2}
       error "cleaning up manifest ${2##*/} in $1"
       ec2-delete-bundle $SECRET_ARGS --bucket "$1" \
         --manifest "$2" --yes --batch --clear ||
         error "failed to delete bucket=$1 manifest=$2"
     fi

     if [ -n "$CLEAN_DELETE_BUNDLE" ]; then
       set -- $CLEAN_DELETE_BUNDLE
       error "cleaning up $1/$2"
       ec2-delete-bundle $SECRET_ARGS --bucket "$1" \
         --manifest "$2" --yes --batch --clear ||
         error "failed to delete bucket=$1 manifest=$2"
     fi

     if [ -n "$CLEAN_INSTANCE_ID" ]; then
       error "*********************************"
       error "I ran instance $CLEAN_INSTANCE_ID. Remember to delete it"
       error "*********************************"
     fi

  fi
  [ ! -d "$TEMP_D" ] || rm -Rf "$TEMP_D"
   
}

sanit() {
  local sanit clean toclean val
  _RET=( "$@" )
  toclean="EC2_ACCESS_KEY EC2_CERT EC2_SECRET_KEY EC2_PRIVATE_KEY EC2_USER_ID"
  toclean="$toclean BUNDLE_D UNBUNDLE_D"

  for clean in $toclean; do
     val=${!clean}
     [ -n "${val}" ] || continue
     _RET=( ${_RET[@]//${val}/\$$clean} )
  done
  return 0
}

run() {
   local msg="$1"; shift
   error "## $msg"
   sanit "$@"
   error "#" "${_RET[@]}"
   if [ "${DRY_RUN:-0}" = "0" ]; then
     "$@" || {
        fail "FAILED:" "$msg";
      }
   else
     case "$1" in
       ec2-register) echo "IMAGE ami-00000000";;
       ec2-run-instances) cat <<EOF
RESERVATION	r-99999999	$EC2_USER_ID	default
INSTANCE	i-99999999  ami-99999999   ec2-192-168-1.2.compute-1.amazonaws.com	ip-10-72-109-222.ec2.internal	pending	kpname	0	m1.small	2011-11-11T14:32:11.000Z	us-east-1b	aki-805ea7e9
EOF
     esac
   fi
}

config() {
   . "$1"
   for _i in $REQUIRED; do
      [ -n "${!_i}" ] || fail "$_i is not set. must set: $REQUIRED"
   done

   XKEY_ARGS="--cert=$EC2_CERT --private-key=$EC2_PRIVATE_KEY"
   KEY_ARGS="--cert=$EC2_CERT --privatekey=$EC2_PRIVATE_KEY"
   SECRET_ARGS="--access-key=$EC2_ACCESS_KEY --secret-key=$EC2_SECRET_KEY"
}

TEMP_D=$(mktemp -d "${TMPDIR:-/tmp}/${0##*/}.XXXXXX") ||
   fail "failed make tmpdir"

trap cleanup EXIT
