#!/bin/bash

# Copyright (C) 2021 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

readme() {
  echo '''
Create an AVD. e.g.
  AVD_IMG_NAME="sdk_gcar" \
  API_LEVEL=30 \
  DEFAULT_DEVICE_XML="./resource/devices.xml" \
  ./create_avd.sh
'''
}

# Export a variable=default_value if it's empty, e.g.
# exportVar "VAR" "defaultValue"
exportVar()
{
  var=$1
  defaultValue=$2
  if [[ -z "${!var}" ]]; then
    export "${var}=$defaultValue"
    echo "${var}=$defaultValue"
  fi
}

# Export a variable with the value of an XML element in a file as, e.g.
# getValue "TAG_ID" "d:id" "./resource/devices.xml"
getValue() {
  var=$1
  elementTag=$2
  file=$3
  #e.g.        <d:id>aosp_car_10_landscape</d:id>
  value=$(sed -n -e "s/.*<${elementTag}>\(.*\)<\/${elementTag}>.*/\1/p" "${file}")
  export "${var}=${value}"
  echo "${var}=${value}"
}

if [[ -z "${AVD_IMG_NAME}" || -z "${API_LEVEL}" ]]; then
  readme
  exit
fi

MY_NAME=$0
SCRIPT_NAME="${MY_NAME##*/}"
SCRIPT_DIR="${MY_NAME%/$SCRIPT_NAME}"
echo "Running from ${SCRIPT_DIR}"

# set up for Linux or macOS
OS="$(uname -s)"
echo "Running on $OS"
if [[ $OS == "Linux" ]]; then
  export ANDROID_SDK_ROOT="${HOME}/Android/Sdk"
  SED_I_CMD="sed -i "
elif [[ $OS == "Darwin" ]]; then
  export ANDROID_SDK_ROOT="${HOME}/Library/Android/sdk"
  SED_I_CMD="sed -i ''"
else
  echo "ERROR: this does not work on $OS"
  exit
fi
echo "ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}"

if [[ -z ${AVD_IMG_DIR} ]]; then
  AVD_IMG_DIR="${ANDROID_SDK_ROOT}/system-images/android-${API_LEVEL}/${AVD_IMG_NAME}"
fi
echo "AVD_IMG_DIR=${AVD_IMG_DIR}"

if [[ ! -e "${AVD_IMG_DIR}" ]]; then
  echo "ERROR: no AVD image found at ${AVD_IMG_DIR}"
  exit
fi

ABI=$(ls "${AVD_IMG_DIR}")
if [[ "${ABI}" != "x86" && "${ABI}" != "x86_64" ]]; then
  echo "ERROR: AVD image zip file format incorrect as ${AVD_DIR} should contain x86 or x86_64 as: https://source.android.com/devices/automotive/start/avd#pack-an-avd-image-zip-file "
  exit
fi
echo "ABI=${ABI}"

# sdk_gcar_30
AVD_NAME="${AVD_IMG_NAME}_${API_LEVEL}"
AVD_INI="${HOME}/.android/avd/${AVD_NAME}.ini"
AVD_PATH_REL="avd/${AVD_NAME}.avd"
AVD_PATH="${HOME}/.android/${AVD_PATH_REL}"
AVD_CONFIG_INI="${AVD_PATH}/config.ini"

if [[ -e "${AVD_PATH}" ]]; then
  echo "NOTE: ${AVD_PATH} exists. Delete them if to recreate, e.g."
  echo "rm -r ${AVD_PATH} || rm ${AVD_INI}"
  exit
fi

# It should be aligned with avdmanager.
# May use https://developer.android.com/studio/command-line/avdmanager, but
# 1. more setup steps required for users & 2. slow on parsing image folders
# So here just add  the bare minimum set up.
echo "Create ${AVD_INI}"
echo "avd.ini.encoding=UTF-8
path=${AVD_PATH}
path.rel=${AVD_PATH_REL}
target=android-${API_LEVEL}" >> "${AVD_INI}"

echo
mkdir -p "${AVD_PATH}"
USERDATA_DIR="${AVD_PATH}/userdata.img"
echo "Create Avd Userdata at ${USERDATA_DIR}"
cp "${AVD_IMG_DIR}/${ABI}/userdata.img" "${USERDATA_DIR}"

DEVICE_XML="${AVD_IMG_DIR}/${ABI}/devices.xml"
if [[ ! -e "${DEVICE_XML}" ]]; then
  echo "NOTE: No ${DEVICE_XML} in the AVD image."
  if [[ ! -e "${DEFAULT_DEVICE_XML}" ]]; then
    echo "ERROR: Need to set DEFAULT_DEVICE_XML at least."
    exit
  else
    echo "COPY: ${DEFAULT_DEVICE_XML} ${DEVICE_XML}"
    cp "${DEFAULT_DEVICE_XML}" "${DEVICE_XML}"
    echo "NOTE: Please restart Android Studio, so the new devics.xml will be properly loaded."
  fi
fi
echo "DEVICE_XML=${DEVICE_XML}"
getValue "DEVICE_PROFILE_NAME" "d:id" "${DEVICE_XML}"
getValue "MANUFACTURER" "d:manufacturer" "${DEVICE_XML}"
getValue "ORIENTATION" "d:screen-orientation" "${DEVICE_XML}"
getValue "TAG_ID" "d:tag-id" "${DEVICE_XML}"
getValue "SKIN" "d:skin" "${DEVICE_XML}"


if [[ "${ORIENTATION}" == "land" ]]; then
  ORIENTATION="landscape"
fi

echo "Create ${AVD_CONFIG_INI}"
exportVar "TAG_ID" "android-automotive"
# MANUFACTURER & DEVICE_PROFILE_NAME need to match those in devices.xml
exportVar "MANUFACTURER" "Android"
exportVar "DEVICE_PROFILE_NAME" "aosp_car_10_landscape"
exportVar "ORIENTATION" "landscape"
exportVar "NCORE" 4
exportVar "RAM" "4096"
exportVar "HEAP" "576"
exportVar "DATA" "6G"

echo "avd.ini.encoding=UTF-8
AvdId=${AVD_NAME}
avd.ini.displayname=${AVD_NAME}
tag.display=${AVD_NAME}
tag.id=${TAG_ID}
image.sysdir.1=system-images/android-${API_LEVEL}/${AVD_IMG_NAME}/${ABI}/
abi.type=${ABI}
hw.arc=false
hw.device.manufacturer=${MANUFACTURER}
hw.device.name=${DEVICE_PROFILE_NAME}
hw.cpu.arch=${ABI}
hw.cpu.ncore=${NCORE}
hw.gpu.enabled=yes
hw.gpu.mode=auto
hw.keyboard=yes
hw.initialOrientation=${ORIENTATION}
hw.ramSize=${RAM}
vm.heapSize=${HEAP}
disk.dataPartition.size=${DATA}" > "${AVD_CONFIG_INI}"

if [[ -z "${SKIN}" ]]; then
  skinSettings="showDeviceFrame=no"
else
  skinSettings="showDeviceFrame=yes
skin.dynamic=yes
skin.name=${SKIN}
skin.path=${AVD_IMG_DIR}/${ABI}/skins/${SKIN}"
fi
echo "${skinSettings}" >> "${AVD_CONFIG_INI}"
