#!/usr/bin/env bash

BASE_URL="https://gist.asfd.cn/jetsung/vscode/raw/HEAD/"
LIST_FILE="index.txt" # 默认扩展 ID 列表文件
DESC_FILE="README.md" # 描述 Markdown 文件
IDE_CMD="code" # 默认 VSCode
FORCE=false
EXTRA=""
VERBOSE=false  # -v: 只显示详细扩展信息（纯文本单行格式），不安装

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

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

    # 处理 LIST_FILE
if [[ "$LIST_FILE" != *.* ]]; then
    LIST_FILE="${LIST_FILE}.txt"
fi

    URL_DESC="${BASE_URL}${DESC_FILE}"

if $VERBOSE; then
    echo
    curl -s --fail "$URL_DESC" | awk '
    /^\| \[/ && /\| `[^`]+` \|/ {
        split($0, fields, "\\|")
        if (length(fields) < 6) next

        # === 名称 ===
        name_raw = fields[2]
        gsub(/^[ \t]+|[ \t]+$/, "", name_raw)
        if (match(name_raw, /\*\*([^*]+)\*\*/)) {
            name = substr(name_raw, RSTART + 2, RLENGTH - 4)
        } else if (match(name_raw, /^\[([^]]+)\]/)) {
            name = substr(name_raw, RSTART + 1, RLENGTH - 2)
        } else {
            name = name_raw
        }
        gsub(/^[ \t]+|[ \t]+$/, "", name)

        # === 扩展 ID（去除反引号）===
        id = fields[3]
        gsub(/^[ \t]+|[ \t]+$/, "", id)
        gsub(/`/g, "", id)

        # === 描述 ===
        desc = fields[5]
        gsub(/^[ \t]+|[ \t]+$/, "", desc)

        if (name == "" || id == "" || desc == "") next

        # === 生成链接 ===
        split(id, parts, ".")
        if (length(parts) < 2) next
        publisher = parts[1]
        ext_name = ""
        for (i = 2; i <= length(parts); i++) {
            if (i > 2) ext_name = ext_name "."
            ext_name = ext_name parts[i]
        }

        vscode_url = "https://marketplace.visualstudio.com/items?itemName=" id
        openvsx_url = "https://open-vsx.org/extension/" publisher "/" ext_name

        # ✅ 关键：这里不加任何反引号或多余空格
        printf "名称: %s\n扩展ID: %s\n描述: %s\nVSCode: %s\nOpenVSX: %s\n\n", \
               name, id, desc, vscode_url, openvsx_url
    }'
    echo
    exit 0
fi

    # 非 -v 模式：正常下载 index.txt 并安装
    URL_LIST="${BASE_URL}${LIST_FILE}"

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

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

    BASE_CMD="$IDE_CMD --install-extension"
    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 "$@"