#!/bin/bash

# 检查是否提供了目标文件夹路径
if [ -z "$1" ]; then
    echo "Usage: $0 <target_directory>"
    exit 1
fi

# 设置目标文件夹路径
TARGET_DIR="$1"

# 检查 Terser 是否已安装
if ! command -v terser &> /dev/null
then
    echo "Terser could not be found. Please install it first."
    exit 1
fi

# 检查 html-minifier-terser 是否已安装
if ! command -v html-minifier-terser &> /dev/null
then
    echo "html-minifier-terser could not be found. Please install it first."
    exit 1
fi

# 遍历文件夹中的所有 HTML 和 JS 文件
find "$TARGET_DIR" -type f \( -name "*.html" -o -name "*.js" \) | while read FILE
do
    # 如果是 HTML 文件
    if [[ "$FILE" == *.html ]]; then
        echo "Processing HTML file: $FILE"

        # 使用 html-minifier-terser 压缩 HTML 文件
        html-minifier-terser --collapse-whitespace --remove-comments --minify-js true --minify-css true -o "$FILE" "$FILE"
        echo "Compressed HTML file: $FILE"

        # 提取 HTML 文件中的 JavaScript 代码
        SCRIPT_CONTENT=$(grep -oP '(?<=<script.*>).*?(?=</script>)' "$FILE")

        if [ -z "$SCRIPT_CONTENT" ]; then
            echo "No script content found in $FILE. Skipping."
        else
            # 将提取的 JavaScript 代码保存到临时文件
            TEMP_JS_FILE=$(mktemp)
            echo "$SCRIPT_CONTENT" > "$TEMP_JS_FILE"

            # 使用 Terser 混淆 JavaScript 代码
            terser "$TEMP_JS_FILE" --compress --mangle --output "$TEMP_JS_FILE.min.js"

            # 读取混淆后的 JavaScript 代码
            MINIFIED_JS=$(cat "$TEMP_JS_FILE.min.js")

            # 将混淆后的 JavaScript 插回 HTML 文件
            sed -i "/<script>/,/<\/script>/c\\<script>$MINIFIED_JS<\/script>" "$FILE"

            # 清理临时文件
            rm "$TEMP_JS_FILE" "$TEMP_JS_FILE.min.js"

            echo "Processed and minified script in HTML file: $FILE"
        fi
    fi

    # 如果是 JavaScript 文件 (.js)
    if [[ "$FILE" == *.js ]]; then
        echo "Processing JavaScript file: $FILE"

        # 使用 Terser 混淆 JavaScript 文件
        terser "$FILE" --compress --mangle --output "$FILE"

        echo "Minified JavaScript file: $FILE"
    fi
done

echo "All files processed."

