#!/usr/bin/env bash
set -e
set -u
set -o pipefail
trap 'echo "An error occurred. Exiting."; exit 1' ERR

. ./build_script/android/functions.sh

# 构建类型 release debug profile
BUILD_TYPE=$1
# 构建环境 dev sit uat prod
DOMAIN_ENV=$2
# 版本名字 1.0.0
BUILD_VERSION_NAME=$3
# 版本号 1
BUILD_VERSION_CODE=$4
# 分支
BRANCH=$5

######################################## 以上入参 ########################################

BUILD_NUM=$(grep "version:" pubspec.yaml | awk '{print $2}' | awk -F'[:+]' '{print $2}')
# 构建号
BUILD_VERSION_CODE_USE=$(expr $BUILD_NUM + $BUILD_VERSION_CODE)

# 构建环境
PROJECT_BUILD_ENV="--debug"

# 文件保存目录
SAVE_DIR="debug"

# 项目根目录
project_dir=$PWD

# 基于构建环境定义混淆设置
case $1 in
  debug)
    PROJECT_BUILD_ENV="--debug"
    OBFUSCATION_SETTINGS=""
    SAVE_DIR="debug"
    ;;
  profile)
    PROJECT_BUILD_ENV="--profile"
    OBFUSCATION_SETTINGS=""
    SAVE_DIR="profile"
    ;;
  release)
    PROJECT_BUILD_ENV="--release"
    OBFUSCATION_SETTINGS="--obfuscate --split-debug-info=${project_dir}/buildPackage/$1/symbol"
    SAVE_DIR="release"
    ;;
  *)
    echo "Invalid build environment: $1"
    exit 1
    ;;
esac



rm -r "${project_dir}"/buildPackage/ && echo "以前目录删除成功"
if [ ! -d "${project_dir}/buildPackage/$1" ]; then
  mkdir -p "${project_dir}/buildPackage/$1"
fi

######################################## 开始构建 ########################################

# 清理缓存
flutter clean && flutter pub get

echo "flutter build appbundle $PROJECT_BUILD_ENV  $OBFUSCATION_SETTINGS --build-name=$BUILD_VERSION_NAME  --build-number=$BUILD_VERSION_CODE_USE --dart-define=ENVIRONMENT="${DOMAIN_ENV}""
# 开始构建
flutter build appbundle $PROJECT_BUILD_ENV  $OBFUSCATION_SETTINGS --build-name=$BUILD_VERSION_NAME  --build-number=$BUILD_VERSION_CODE_USE --dart-define=ENVIRONMENT="${DOMAIN_ENV}"


OUT_PKG_NAME=$BUILD_VERSION_NAME-$BUILD_VERSION_CODE_USE-$DOMAIN_ENV-$BUILD_TYPE

cp $project_dir/build/app/outputs/bundle/$BUILD_TYPE/app-$BUILD_TYPE.aab $project_dir/buildPackage/$BUILD_TYPE
mv $project_dir/buildPackage/$BUILD_TYPE/app-$BUILD_TYPE.aab $project_dir/buildPackage/$BUILD_TYPE/smdp-$OUT_PKG_NAME.aab

PKG_PATH=$project_dir/buildPackage/$BUILD_TYPE/smdp-$OUT_PKG_NAME.aab
PKG_NAME=smdp-$OUT_PKG_NAME.aab
RESOURCE_PATH=$project_dir/buildPackage/$BUILD_TYPE/resource/$OUT_PKG_NAME-armeabi-v7a.zip
RESOURCE_NAME=$OUT_PKG_NAME-armeabi-v7a.zip
MAPPING_PATH=$project_dir/buildPackage/$BUILD_TYPE/resource/$OUT_PKG_NAME-mapping.txt
MAPPING_NAME=$OUT_PKG_NAME-mapping.txt
echo "构建完成"

######################################## 资源包整理 ########################################

mkdir -p "${project_dir}/buildPackage/$1/resource"

cd $project_dir/build/app/intermediates/merged_native_libs/release/out/lib/
zip -r armeabi-v7a.zip armeabi-v7a
cd $project_dir

echo '处理mapping文件'
cp $project_dir/build/app/outputs/mapping/$BUILD_TYPE/mapping.txt  $project_dir/buildPackage/$BUILD_TYPE/resource
mv $project_dir/buildPackage/$BUILD_TYPE/resource/mapping.txt $project_dir/buildPackage/$BUILD_TYPE/resource/$OUT_PKG_NAME-mapping.txt

# 拷贝so文件
cp -r $project_dir/build/app/intermediates/merged_native_libs/release/out/lib/armeabi-v7a.zip $project_dir/buildPackage/$BUILD_TYPE/resource
mv $project_dir/buildPackage/$BUILD_TYPE/resource/armeabi-v7a.zip $project_dir/buildPackage/$BUILD_TYPE/resource/$OUT_PKG_NAME-armeabi-v7a.zip

PKG_NAME_INFO=smdp-$BUILD_VERSION_NAME-$BUILD_VERSION_CODE_USE-$DOMAIN_ENV-$BUILD_TYPE

######################################## 文件上传/通知 ########################################
# 文件上传
echo "文件上传开始"
aab_url=$(python3 ./build_script/android/pkg_upload_minio.py "$PKG_PATH" "$PKG_NAME" "aab")
resource_url=$(python3 ./build_script/android/pkg_upload_minio.py "$RESOURCE_PATH" "$RESOURCE_NAME" "aab")
mapping_url=$(python3 ./build_script/android/pkg_upload_minio.py "$MAPPING_PATH" "$MAPPING_NAME" "aab")

sendNewsToQWOnlyDownLoad $aab_url "$BRANCH" $PKG_NAME_INFO "AAB"
sendNewsToQWOnlyDownLoad $resource_url "$BRANCH" $PKG_NAME_INFO "调试符号文件"
sendNewsToQWOnlyDownLoad $mapping_url "$BRANCH" $PKG_NAME_INFO "映射文件"
echo "打包过程完成"
