#!/usr/bin/env bash

function usage() {
  echo "Usage: studiow [--clear-caches] [--clean] [--reinstall] [--profile] <project subset>"
  echo
  echo "OPTIONS"
  echo
  echo " --clear-caches"
  echo "   Clear generated caches (but not user settings) before launching"
  echo
  echo " --clean"
  echo "   Clear (with backup) generated files (settings, caches, etc) before launching"
  echo "   Also implies --clear-caches"
  echo
  echo " --reinstall"
  echo "   Remove and re-download Studio itself. Also implies --clean"
  echo
  echo " --profile"
  echo "   Enables profiling of Studio"
  echo
  echo "Project subsets:"
  echo " m, main"
  echo "  Open the project subset main: non-Compose Jetpack libraries"
  echo
  echo " c, compose"
  echo "  Open the project subset compose"
  echo
  echo " f, flan"
  echo "  Open the project subset flan: Fragment, Lifecycle, Activity, and Navigation"
  echo
  echo " media"
  echo "  Open the project subset media: Media, Media2, and MediaRouter"
  echo
  echo " w, wear"
  echo "  Open the project subset for Wear OS libraries"
  echo
  echo " g, glance"
  echo "  Open the project subset for glance projects"
  echo
  echo " a, all"
  echo "  Open the project subset all"
  echo
  exit 1
}

cd "$(dirname $0)"

subsetArg=""
clearCaches=false
cleanSettings=false
reinstall=false
projectSubset=""
profile=false
while [ "$1" != "" ]; do
  arg="$1"
  shift
  # parse options
  if [ "$arg" == "--clear-caches" ]; then
    clearCaches=true
    continue
  fi
  if [ "$arg" == "--clean" ]; then
    clearCaches=true
    cleanSettings=true
    continue
  fi
  if [ "$arg" == "--reinstall" ]; then
    clearCaches=true
    cleanSettings=true
    reinstall=true
    continue
  fi
  if [ "$arg" == "--profile" ]; then
    profile=true
    continue
  fi
  # parse arguments
  subsetArg="$arg"
  newSubset=""
  if [ "$subsetArg" == "m" -o "$subsetArg" == "main" ]; then
    newSubset=main
  fi
  if [ "$subsetArg" == "c" -o "$subsetArg" == "compose" ]; then
    newSubset=compose
  fi
  if [ "$subsetArg" == "f" -o "$subsetArg" == "flan" ]; then
    newSubset=flan
  fi
  if [ "$subsetArg" == "media" ]; then
    newSubset=media
  fi
  if [ "$subsetArg" == "w" -o "$subsetArg" == "wear" ]; then
    newSubset=wear
  fi
  if [ "$subsetArg" == "g" -o "$subsetArg" == "glance" ]; then
      newSubset=glance
  fi
  if [ "$subsetArg" == "a" -o "$subsetArg" == "all" ]; then
    newSubset=all
  fi
  if [ "$newSubset" == "" ]; then
    echo "Unrecognized argument: '$subsetArg'"
    usage
  fi
  if [ "$projectSubset" != "" ]; then
    echo "Unrecognized argument '$subsetArg', cannot specify project subset more than once"
    usage
  fi
  projectSubset=$newSubset
done

if [ "$projectSubset" == "" ]; then
  echo "Project subset is required"
  usage
fi

export ANDROIDX_PROJECTS=$projectSubset

# ensures the nonexistence of a file or directory, and makes a backup
function remove() {
  path="$1"
  backup="$(dirname $path)/studio-backup/$(basename $path)"
  if [ -e "$path" ]; then
    echo "Moving $path to $backup"
    rm -rf "$backup"
    mkdir -p "$(dirname $backup)"
    mv "$path" "$backup"
  fi
}

if [ "$reinstall" == "true" ]; then
  # remove Studio itself so Gradle will re-download it
  rm -rf studio
fi

if [ "$profile" == "true" ]; then
  PROFILE_FILE=/tmp/report.json
  traceConfig="$(cd development/studio && pwd)/profile.config"
  rm -f "$PROFILE_FILE"
  echo "Profile file will be $PROFILE_FILE , which will be able to be loaded into chrome://tracing"
  echo
  echo "If you find that too many or too few function calls are included in the trace, modify $traceConfig"
  echo
  tracerJar="$(cd ../../prebuilts/androidx/external/com/android/tools/tracer/agent && pwd)/trace_agent.jar"
  # Make sure to set _JAVA_OPTIONS before starting Gradle
  export _JAVA_OPTIONS="$_JAVA_OPTIONS -javaagent:${tracerJar}=${traceConfig}"
fi

# remove studio-specific caches
if [ "$cleanSettings" == "true" ]; then
  # make backups of files that users might have customized
  remove ~/.AndroidStudioAndroidX
  remove ~/.AndroidStudioAndroidXPlayground
  remove ~/.android
fi

if [ "$clearCaches" == "true" ]; then
  # delete (without backup) files that users won't have customized
  git clean -fdX .idea/

  # remove gradle caches too and build
  ./cleanBuild.sh -y studio
else
  # If not a clean launch, then a Gradle daemon might be running.
  # If profiling, we need to stop the Gradle daemon to make sure any changes to the
  # profiling properties will be used.
  if [ "$profile" == "true" ]; then
    ./gradlew --stop
  fi

  # ask gradle to launch studio
  ./gradlew :studio
fi
