#!/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 " ca, camera"
  echo "  Open the project subset camera"
  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 " kmp"
  echo "  Open the project subset KMP: Projects that have KMP builds"
  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
  echo " native"
  echo "  Open the project subset for native 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" == "ca" -o "$subsetArg" == "camera" ]; then
    newSubset=camera
  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" == "k" -o "$subsetArg" == "kmp" ]; then
      newSubset=kmp
  fi
  if [ "$subsetArg" == "native" ]; then
    newSubset=native
  fi
  if [ "$subsetArg" == "a" -o "$subsetArg" == "all" ]; then
    newSubset=all
  fi
  if [ "$subsetArg" == "t" -o "$subsetArg" == "tools" ]; then
    newSubset=tools
  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
