#!/bin/bash
# ===== ACE环境配置 =====

readonly ACE_ENVIRONMENTS=(
    "bookworm-run:amber-ce-bookworm"
    "trixie-run:amber-ce-trixie"
    "deepin23-run:amber-ce-deepin23"
    "sid-run:amber-ce-sid"
)
# 生成ACE环境参数帮助信息
function generate_ace_help() {
    local help_text=""
    for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
        local ace_param="--${ace_entry#*:}"
        help_text+="  $ace_param          使用${ace_entry%%:*} ACE容器卸载\n"
    done
    echo -e  "$help_text"
}
# 帮助函数
function show_help() {
    echo "Spark Store Uninstall script. 星火商店卸载脚本"
    echo "用法: $0 [选项] 包名"
    echo "选项:"
    echo "  -h, --help                   显示帮助信息"
    echo "  --delete-after-install       安装成功后删除软件包"
    echo "  --no-create-desktop-entry    不创建桌面快捷方式"
    echo "  --force-create-desktop-entry 强制创建桌面快捷方式"
    echo "$(generate_ace_help)"
    echo "  --native                     只在主机卸载,不使用ACE容器"
}


# 参数解析
function parse_args() {
  while [ $# -gt 0 ]; do
    case "$1" in
      -h|--help)
        show_help
        exit 0
        ;;
      --delete-after-install)
        DELETE_AFTER_INSTALL="1"
        shift
        ;;
      --native)
        FORCE_NATIVE="1"
        shift
        ;;
      --no-create-desktop-entry)
        NO_CREATE_DESKTOP="1"
        shift
        ;;
      --force-create-desktop-entry)
        FORCE_CREATE_DESKTOP="1"
        shift
        ;;
      *)
        # 检查是否为ACE环境参数
        local is_ace_param=0
        for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
          local ace_param="--${ace_entry#*:}"
          if [ "$1" = "$ace_param" ]; then
            # 将ACE环境命令名加入数组
            ACE_PARAMS+=("${ace_entry%%:*}")
            is_ace_param=1
            shift
            break
          fi
        done

        # 如果不是ACE环境参数,则视为包名
        if [ "$is_ace_param" -eq 0 ]; then
          PACKAGE_NAME="$1"
          shift
        fi
        ;;
    esac
  done
}

# ===== 日志和函数 =====
[ -f /opt/durapps/spark-store/bin/bashimport/log.amber ] && \
    source /opt/durapps/spark-store/bin/bashimport/log.amber || {
    log.info() { echo "INFO: $*"; }
    log.warn() { echo "WARN: $*"; }
    log.error() { echo "ERROR: $*"; }
    log.debug() { echo "DEBUG: $*"; }
}

# 初始化变量
FORCE_NATIVE=0
ACE_PARAMS=()
PACKAGE_NAME=""
uninstall_success=0

# 解析参数
parse_args "$@"

if [ -z "$PACKAGE_NAME" ]; then
    log.error "请指定要卸载的包名"
    exit 1
fi

# 尝试在本地卸载
try_native_uninstall() {
    if [ "$FORCE_NATIVE" -eq 1 ] || [ ${#ACE_PARAMS[@]} -eq 0 ]; then
        echo "----------------------------------------"
        echo "正在检查本地环境中的安装..."
        echo "----------------------------------------"
        
        dpkg -s "$PACKAGE_NAME" > /dev/null
        RET="$?"
        if [[ "$RET" == "0" ]]; then
            echo "----------------------------------------"
            echo "在本地环境中找到了安装"
            echo "----------------------------------------"
            apt autopurge "$PACKAGE_NAME" -y
            uninstall_success=1
            return 0
        else
            echo "----------------------------------------"
            echo "在本地环境中未能找到安装"
            echo "----------------------------------------"
        fi
    fi
    return 1
}

# 尝试在ACE环境中卸载
try_ace_uninstall() {
    local ace_cmd="$1"
    if command -v "$ace_cmd" >/dev/null 2>&1; then
        echo "----------------------------------------"
        echo "正在检查 $ace_cmd 环境的安装..."
        echo "----------------------------------------"
        
        $ace_cmd dpkg -l | grep "^ii  $PACKAGE_NAME " > /dev/null
        try_run_ret="$?"
        
        if [ "$try_run_ret" -eq 0 ]; then
            echo "----------------------------------------"
            echo "在 $ace_cmd 环境中找到了安装"
            echo "----------------------------------------"
            $ace_cmd apt autopurge "$PACKAGE_NAME" -y
            uninstall_success=1
            return 0
        else
            echo "----------------------------------------"
            echo "在 $ace_cmd 环境中未能找到安装"
            echo "----------------------------------------"
        fi
    fi
    return 1
}

# 主卸载逻辑
if [ $FORCE_NATIVE -eq 1 ] && [ ${#ACE_PARAMS[@]} -eq 0 ]; then
    # 只有 --native 参数时,只尝试本地卸载
    try_native_uninstall || exit $?
elif [ $FORCE_NATIVE -eq 0 ] && [ ${#ACE_PARAMS[@]} -gt 0 ]; then
    # 只有 ACE 参数时,只尝试指定的 ACE 环境卸载
    for ace_param in "${ACE_PARAMS[@]}"; do
        try_ace_uninstall "$ace_param"
    done
elif [ $FORCE_NATIVE -eq 1 ] && [ ${#ACE_PARAMS[@]} -gt 0 ]; then
    # 同时有 --native 和 ACE 参数时,先尝试本地卸载,再尝试 ACE 环境卸载
    try_native_uninstall
    for ace_param in "${ACE_PARAMS[@]}"; do
        try_ace_uninstall "$ace_param"
    done
else
    # 无参数时,先尝试本地卸载,再尝试所有 ACE 环境卸载
    try_native_uninstall
    
    for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
        ace_cmd=${ace_entry%%:*}
        if command -v "$ace_cmd" >/dev/null 2>&1; then
            try_ace_uninstall "$ace_cmd"
        fi
    done
fi

if [ $uninstall_success -eq 0 ]; then
    echo "----------------------------------------"
    echo "在所有指定的环境中未能找到安装,退出"
    echo "----------------------------------------"
    exit 1
fi

exit 0