#!/bin/bash

set -e

usage() {

cat <<EOF
    $0
    --sdk <SDK file path>
    --system <system sdk file path>
    --support <support library file path>
EOF
  exit 2

}

banner() {
  echo "**************************************************"
  echo "Updating $1                                     "
  echo "**************************************************"
}

update_sdk() {
  if [ -f "$SDK" ]
  then
    banner "SDK"
    cd $ROOT_DIR/current
    rm -f android.jar uiautomator.jar framework.aidl
    unzip -j $SDK */android.jar */uiautomator.jar */framework.aidl
  fi
}

update_system_sdk() {
  if [ -f "$SYSTEM_SDK" ]
  then
    banner "system SDK"
    cp -f $SYSTEM_SDK $ROOT_DIR/system_current/android.jar
  fi
}

update_support_lib() {
  if [ -f "$SUPPORT" ]
  then
    banner "support library"
    rm -rf $ROOT_DIR/current/support/
    unzip $SUPPORT >/dev/null

    # Remove duplicates
    rm -f support/v7/appcompat/libs/android-support-v4.jar
    rm -f support/multidex/instrumentation/libs/android-support-multidex.jar

    # Remove samples
    rm -rf support/samples

    # Remove source files
    find support -name "*.java" \
      -o -name "*.aidl" \
      -o -name AndroidManifest.xml \
    | xargs rm

    # Other misc files we don't need
    find support -name "*.gradle" \
      -o -name ".classpath" \
      -o -name ".project" \
      -o -name "project.properties" \
      -o -name "source.properties" \
      -o -name ".readme" \
      -o -name "README.txt" \
      -o -name "package.html" \
      -o -name "NOTICE.txt" \
    | xargs rm

    # Now we can remove empty dirs
    find . -type d -empty -delete
  fi
}

main() {
  while [ "$#" -gt 0 ]
  do
    case "$1" in
      --help|-h)
        usage
        ;;
      --sdk)
        export SDK="$2"
        shift; shift
        ;;
      --system)
        export SYSTEM_SDK="$2"
        shift; shift
        ;;
      --support)
        export SUPPORT="$2"
        shift; shift
        ;;
      -*)
        usage
        ;;
      *)
        break
        ;;
    esac
  done

  ROOT_DIR=$(realpath $(dirname $0))

  update_sdk
  update_system_sdk
  update_support_lib
}

main $*
