#!/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 " 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" == "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
