#!/usr/bin/env bash

BASE_URL="https://gist.asfd.cn/jetsung/vscode/raw/HEAD/"
LIST_FILE="install.txt"  # 默认列表文件
IDE_CMD="code"           # 默认 VSCode
FORCE=false
EXTRA=""

# 参数解析函数
parameters() {
    while getopts "s:f e:n:" opt; do
        case $opt in
            s) IDE_CMD="$OPTARG" ;;
            f) FORCE=true ;;
            e) EXTRA="$OPTARG" ;;
            n) LIST_FILE="$OPTARG" ;;
            \?) echo "无效参数: -$OPTARG" >&2; exit 1 ;;
        esac
    done
    shift $((OPTIND-1))

    # 剩余所有参数追加到 EXTRA
    EXTRA="$EXTRA $@"
}

# 主函数
main() {
    parameters "$@"

    # 处理 LIST_FILE：如果不包含 . 则自动添加 .txt（除非是 *.*）
    if [[ "$LIST_FILE" != "*.*" ]] && [[ "$LIST_FILE" != *.* ]]; then
        LIST_FILE="${LIST_FILE}.txt"
    fi

    URL="${BASE_URL}${LIST_FILE}"

    echo "从 $URL 下载扩展列表..."
    EXTENSIONS=$(curl -s --fail "$URL" | grep -v '^#' | grep -v '^$' | sed '/^$/d')

    if [ -z "$EXTENSIONS" ]; then
        echo "错误: 未获取到扩展列表或文件为空！请检查文件名（当前: $LIST_FILE）。" >&2
        exit 1
    fi

    BASE_CMD="$IDE_CMD --install-extension"

    # 添加 --force
    if $FORCE; then
        EXTRA="--force $EXTRA"
    fi

    echo "开始为 $IDE_CMD 安装扩展（命令: $BASE_CMD ... $EXTRA）"
    echo "扩展列表:"
    echo "$EXTENSIONS" | tr ' ' '\n'  # 美化显示，每行一个
    echo "-----------------"

    # 遍历安装（处理行内空格分隔或多行）
    echo "$EXTENSIONS" | tr ' ' '\n' | while read -r ext; do
        [ -z "$ext" ] && continue
        echo "安装: $ext"
        $BASE_CMD "$ext" $EXTRA || echo "警告: 安装 $ext 失败（可能已安装或 ID 不兼容）"
    done

    echo "-----------------"
    echo "所有扩展安装完成！请重启 IDE 以生效。"
}

main "$@"