#!/bin/bash
# 压缩截图脚本 — 保证最终文件 ≤ 2MB
# 用法: bash /data/news/scripts/compress_screenshots.sh
# 流程：先 quality 逐级降级 → 如果还超 2MB 就逐级缩放

CN_SRC="/data/news/cn-screenshot-ipad.png"
KO_SRC="/data/news/ko-screenshot-ipad.png"
DATE=$(date +%Y%m%d)

# 如果传了参数，用参数覆盖日期
if [ -n "$1" ]; then
    DATE="$1"
fi
ARCHIVE="/data/news/screenshots"
MAX_BYTES=2097152

compress() {
    local src="$1"
    local dst_name="$2"

    [ -f "$src" ] || { echo "  ⚠️ 跳过: $src"; return 0; }

    local orig_size
    orig_size=$(stat -c%s "$src" 2>/dev/null || echo 0)

    # 已达标则跳过
    if [ "$orig_size" -le "$MAX_BYTES" ]; then
        local colors
        colors=$(identify -verbose "$src" 2>/dev/null | grep "^  Colors:" | awk '{print $2}' | tr -d ' ')
        if [ -n "$colors" ] && [ "$colors" -le 256 ] 2>/dev/null; then
            echo "  ✅ $(basename "$src"): $(echo "scale=1; $orig_size/1048576" | bc)MB (已达标)"
            mkdir -p "$ARCHIVE"
            cp "$src" "$ARCHIVE/${dst_name}-${DATE}-daily-report.png"
            return 0
        fi
    fi

    # ── 第1阶段：pngquant 逐级降质 ──
    local success=0
    for Q in "60-80" "50-70" "40-60" "30-50" "20-40" "10-30"; do
        pngquant --quality="$Q" --speed=1 --force "$src" --output /tmp/cq_tmp.png 2>/dev/null || break
        optipng -o2 /tmp/cq_tmp.png -quiet -out /tmp/cq_out.png 2>/dev/null || cp /tmp/cq_tmp.png /tmp/cq_out.png
        local s; s=$(stat -c%s /tmp/cq_out.png 2>/dev/null || echo 0)
        if [ "$s" -le "$MAX_BYTES" ] || [ "$s" -eq 0 ]; then
            mv -f /tmp/cq_out.png "$src"
            local ns=$(( s > 0 ? s : 0 ))
            echo "  ✅ $(basename "$src"): $(echo "scale=1; $orig_size/1048576" | bc)MB → $(echo "scale=1; $ns/1048576" | bc)MB (quality=$Q)"
            success=1
            break
        fi
        echo "  ⏳ quality=$Q → $(echo "scale=1; $s/1048576" | bc)MB，继续降级..."
    done

    # ── 第2阶段：如果还超，逐级缩放（从 90% 往下） ──
    local cur_size
    cur_size=$(stat -c%s "$src" 2>/dev/null || echo 0)
    if [ "$cur_size" -gt "$MAX_BYTES" ]; then
        echo "  ⚠️ pngquant 到极限仍 >2MB，开始逐级缩放..."
        for PCT in 90 85 80 75 70 65 60; do
            convert "$src" -resize "${PCT}%" /tmp/cq_scaled.png 2>/dev/null
            pngquant --quality="60-80" --speed=1 --force /tmp/cq_scaled.png --output /tmp/cq_sq.png 2>/dev/null
            optipng -o2 /tmp/cq_sq.png -quiet -out /tmp/cq_sq_out.png 2>/dev/null || cp /tmp/cq_sq.png /tmp/cq_sq_out.png
            local ss; ss=$(stat -c%s /tmp/cq_sq_out.png 2>/dev/null || echo 0)
            if [ "$ss" -le "$MAX_BYTES" ]; then
                mv -f /tmp/cq_sq_out.png "$src"
                local ns=$(( ss > 0 ? ss : 0 ))
                echo "  ✅ $(basename "$src"): $(echo "scale=1; $orig_size/1048576" | bc)MB → $(echo "scale=1; $ns/1048576" | bc)MB (resize=${PCT}%)"
                success=1
                break
            fi
            echo "  ⏳ resize=${PCT}% → $(echo "scale=1; $ss/1048576" | bc)MB，继续缩小..."
        done
    fi

    # 同步存档
    mkdir -p "$ARCHIVE"
    cp "$src" "$ARCHIVE/${dst_name}-${DATE}-daily-report.png"

    # 最终报告
    local fin
    fin=$(stat -c%s "$src" 2>/dev/null || echo 0)
    if [ "$fin" -gt "$MAX_BYTES" ]; then
        echo "  ❌ $(basename "$src"): $(echo "scale=1; $fin/1048576" | bc)MB (仍 >2MB)"
    elif [ "$success" -eq 1 ] || [ "$fin" -le "$MAX_BYTES" ]; then
        echo "  📁 存档: $ARCHIVE/${dst_name}-${DATE}-daily-report.png"
    fi

    rm -f /tmp/cq_tmp.png /tmp/cq_out.png /tmp/cq_scaled.png /tmp/cq_sq.png /tmp/cq_sq_out.png
}

echo "📸 截图压缩 $(date '+%Y-%m-%d %H:%M') (目标 ≤ 2MB)"
echo "============================================"
compress "$CN_SRC" "cn"
compress "$KO_SRC" "ko"
echo "✅ 全部完成"
