#!/bin/bash
TOOLKIT_LOCATION=$(dirname "$0")
source "$TOOLKIT_LOCATION"/../common_tools
android_choose_device

LOCAL_SETTINGS_LIST_PATH=$TOOLKIT_LOCATION/../data/toolkit_intent_list.txt

import_intents(){
  echo "⏳ Importing settings activity list..."
  ANDROID_TOOLS_SETTINGS_INTENT_LIST_PATH=$(find ~/Library/Android/sdk -name 'activity_actions.txt' | sort | tail -1)
  {
    grep -i "android.settings" "$ANDROID_TOOLS_SETTINGS_INTENT_LIST_PATH" # List settings intents
    grep -i -e "android.net.wifi.PICK_WIFI_NETWORK" -e "android.os.storage.action.MANAGE_STORAGE" -e "android.intent.action.MANAGE_PERMISSIONS" -e "android.intent.action.SET_WALLPAPER" -e "android.intent.action.VIEW_DOWNLOADS" "$ANDROID_TOOLS_SETTINGS_INTENT_LIST_PATH" # List alternate settings intents
    grep -i "android.media.action" "$ANDROID_TOOLS_SETTINGS_INTENT_LIST_PATH" # List media intents
  } >> "$LOCAL_SETTINGS_LIST_PATH"

  wc -l "$LOCAL_SETTINGS_LIST_PATH" | awk '{print $1}' | grep -q 0 && echo "❗️ Imported list is empty, reimporting lower sdk variant..." && rm "$(find ~/Library/Android/sdk -name 'activity_actions.txt' | sort | tail -1)" && import_intents && return
  echo "✅ Importing from $ANDROID_TOOLS_SETTINGS_INTENT_LIST_PATH completed successfully"
}

start_settings_intent(){
  SETTINGS_INTENT=$(sed "$LINE"!d "$LOCAL_SETTINGS_LIST_PATH")
  echo "🚀 Starting $SETTINGS_INTENT"
  adb -s "$SELECTED_DEVICE" shell am start -a "$SETTINGS_INTENT" &> /dev/null
}

search_for_intent(){
  if nl "$LOCAL_SETTINGS_LIST_PATH" | grep -i -q "$1"; then
    if [[ $(grep -c -i "$1" "$LOCAL_SETTINGS_LIST_PATH") -eq 1 ]]; then #If there is only one result
      LINE=$(nl "$LOCAL_SETTINGS_LIST_PATH" | grep -i "$1" | awk '{print $1}')
    else
      nl "$LOCAL_SETTINGS_LIST_PATH" | grep -i "$1"
      read -r -p "📝 Choose option number: " LINE
    fi
    start_settings_intent
  else
    read -r -p "🤷‍ No \"$1\" intent found, try again or leave blank: " KEYWORD
    search_for_intent "$KEYWORD"
  fi
}

handle_preset(){
  case "$1" in
    "S" | "s")
    echo "🚀 Launching system settings app root activity..."
    adb -s "$SELECTED_DEVICE" shell am start -a android.settings.SETTINGS &> /dev/null
    ;;

    "1" | "dev" | "developer")
    echo "🔨 Opening developer settings..."
    adb -s "$SELECTED_DEVICE" shell am start -a android.settings.APPLICATION_DEVELOPMENT_SETTINGS &> /dev/null
    ;;

    "2" | "locale" | "lang" | "language")
    echo "🌍 Opening locale settings..."
    adb -s "$SELECTED_DEVICE" shell am start -a android.settings.LOCALE_SETTINGS &> /dev/null
    ;;

    "4" | "wifi" | "network")
    echo "🌐 Opening WIFI network settings..."
    adb -s "$SELECTED_DEVICE" shell am start -a android.net.wifi.PICK_WIFI_NETWORK &> /dev/null
    ;;

    "5" | "storage")
    echo "📦 Opening storage management ..."
    adb -s "$SELECTED_DEVICE" shell am start -a android.os.storage.action.MANAGE_STORAGE &> /dev/null
    ;;

    "6" | "power")
    echo "🔋 Opening power usage statistics..."
    adb -s "$SELECTED_DEVICE" shell am start -a android.intent.action.POWER_USAGE_SUMMARY &> /dev/null
    ;;

    "3" | "date" | "time" | "datetime")
    echo "📅 Opening date & time settings..."
    adb -s "$SELECTED_DEVICE" shell am start -a android.settings.DATE_SETTINGS &> /dev/null
    ;;

    "0" | "all" | "list" | "A" | "a")
    echo "📜 Available settings activities:"
    nl "$LOCAL_SETTINGS_LIST_PATH"
    read -r -p "📝 Choose option number: " LINE
    start_settings_intent
    ;;

    "U" | "update" | "u")
    rm "$LOCAL_SETTINGS_LIST_PATH"
    import_intents
    ;;

    *)
    search_for_intent "$1"

    ;;
  esac
}

# Initialize available intent list - inspiration here https://stackoverflow.com/questions/8971160/what-is-the-exhaustive-list-of-all-android-intent-action-actions-available-in
if [ ! -f "$LOCAL_SETTINGS_LIST_PATH" ]; then
    echo "✨ Activity list not initialized yet"
    import_intents
fi

# If arugment not passed, show preset chooser
if [[ "$1" == "" ]]; then
  TOOLKIT_INTENT_COUNT=$(wc -l "$LOCAL_SETTINGS_LIST_PATH")
  TOOLKIT_INTENT_COUNT=$(echo "$TOOLKIT_INTENT_COUNT" | awk '{print $1}') # Remove ghost whitespaces 🙃

  echo "📋 Available options:"
  tput setaf 3; echo "A) Show all $TOOLKIT_INTENT_COUNT settings options"; tput sgr0
  echo -e "S) Open system settings application\\n1) Developer\\n2) Locale\\n3) Date & time\\n4) Wifi network\\n5) Storage management\\n6) Power usage\\nU) Update settings list from Android sdk\\nor\\n<text> to search in all settings"
  read -r -p "📝 Enter your selection: " PRESET
  handle_preset "$PRESET"
  exit
else
  handle_preset "$1"
fi
