#!/bin/bash
# glow-build-ubuntu.sh — Build Glow for Facebook trên Ubuntu
# Dựa trên GitHub Action gốc (macos), chuyển sang Ubuntu
#
# Cách dùng:
#   ./glow-build-ubuntu.sh <ipa_url> [display_name] [bundle_id] [extra_debs...]
#
# Ví dụ:
#   ./glow-build-ubuntu.sh "https://filebin.net/xxx/facebook.ipa"
#   ./glow-build-ubuntu.sh "https://filebin.net/xxx/facebook.ipa" "FB GLOW" "com.glow.facebook"
#   ./glow-build-ubuntu.sh "facebook.ipa" "FB" "com.fb.app" extra.dylib mytweak.deb
#
# Yêu cầu: Ubuntu 20.04+, internet, ~5GB disk

set -euo pipefail

# ─── Parse args ─────────────────────────────────────────────
IPA_URL="${1:?Thiếu URL IPA. Cách dùng: $0 <ipa_url> [display_name] [bundle_id] [extra_debs...]}"
DISPLAY_NAME="${2:-Facebook}"
BUNDLE_ID="${3:-com.facebook.Facebook}"
shift 3 || true
EXTRA_DEBS=("$@")

WORK_DIR="$(pwd)/glow-build-$$"
OUTPUT_DIR="$(pwd)/glow-output"

cleanup() { rm -rf "$WORK_DIR"; }
trap cleanup EXIT

# ─── Bước 0: Cài dependencies ──────────────────────────────
echo "=== [1/7] Install dependencies ==="
for cmd in wget curl jq file unzip zip pipx python3; do
    if ! command -v "$cmd" &>/dev/null; then NEED_SUDO=1; fi
done
if [[ "${NEED_SUDO:-0}" -eq 1 ]]; then
    sudo apt-get update -qq
    sudo apt-get install -y -qq wget curl jq file unzip zip pipx python3 2>/dev/null || true
fi
if ! command -v ldid &>/dev/null; then
    echo "  Downloading ldid..."
    wget -q "https://github.com/ProcursusTeam/ldid/releases/download/v2.1.5-procursus7/ldid_linux_x86_64" -O /tmp/ldid
    chmod +x /tmp/ldid && sudo mv /tmp/ldid /usr/local/bin/ldid
fi
pipx ensurepath 2>/dev/null || true
export PATH="$HOME/.local/bin:$PATH"

if ! command -v cyan &>/dev/null; then
    pipx install --force "https://github.com/asdfzxcvbn/pyzule-rw/archive/main.zip" -q
fi
if ! command -v cyan &>/dev/null; then
    echo "Lỗi: cyan không được cài"
    exit 1
fi

mkdir -p "$WORK_DIR" "$OUTPUT_DIR"

# ─── Bước 1: Download / copy IPA ───────────────────────────
echo "=== [2/7] Prepare IPA ==="
if [[ -f "$IPA_URL" ]]; then
    cp "$(realpath "$IPA_URL")" "$WORK_DIR/facebook.ipa"
else
    cd "$WORK_DIR" && wget "$IPA_URL" --no-verbose -O facebook.ipa 2>&1
fi

FILE_TYPE=$(file --mime-type -b "$WORK_DIR/facebook.ipa")
if [[ "$FILE_TYPE" != "application/zip" && "$FILE_TYPE" != "application/x-ios-app" ]]; then
    echo "Lỗi: File không phải IPA. Detected: $FILE_TYPE"
    exit 1
fi
echo "  IPA OK: $FILE_TYPE ($(du -h "$WORK_DIR/facebook.ipa" | cut -f1))"

# ─── Bước 2: Download Glow tweak ───────────────────────────
echo "=== [3/7] Download Glow tweak ==="
API_URL="https://api.github.com/repos/dayanch96/Glow/releases/latest"
RESPONSE=$(curl -sf "$API_URL")
TAG_NAME=$(echo "$RESPONSE" | jq -r '.tag_name')
DEB_URL=$(echo "$RESPONSE" | jq -r '.assets[0].browser_download_url')
if [[ -z "$DEB_URL" || "$DEB_URL" == "null" ]]; then
    echo "Lỗi: Không tìm thấy Glow release"
    exit 1
fi
cd "$WORK_DIR" && wget "$DEB_URL" --no-verbose -O glow_fb.deb 2>&1
echo "  Glow $TAG_NAME ($(du -h glow_fb.deb | cut -f1))"

# ─── Bước 3: Inject tweak ──────────────────────────────────
echo "=== [4/7] Inject tweak(s) via cyan ==="
ALL_FILES=("glow_fb.deb" "${EXTRA_DEBS[@]}")
echo "  Files: ${ALL_FILES[*]}"

cd "$WORK_DIR"
cyan \
    -i facebook.ipa \
    -o "Glow_FB_${TAG_NAME}.ipa" \
    -uwef "${ALL_FILES[@]}" \
    -n "$DISPLAY_NAME" \
    -b "$BUNDLE_ID" \
    -s

if [[ ! -f "Glow_FB_${TAG_NAME}.ipa" ]]; then
    echo "Lỗi: inject thất bại"
    exit 1
fi
echo "  OK: $(du -h "Glow_FB_${TAG_NAME}.ipa" | cut -f1)"

# ─── Bước 4: Strip Swift dylib ─────────────────────────────
echo "=== [5/7] Strip Swift dylibs ==="
mkdir tmp_payload
unzip -q "Glow_FB_${TAG_NAME}.ipa" -d tmp_payload
find tmp_payload/Payload/*.app/ -name "libswift*.dylib" -print -delete
cd tmp_payload && zip -qr "../Glow_FB_${TAG_NAME}_clean.ipa" Payload && cd ..
mv "Glow_FB_${TAG_NAME}_clean.ipa" "Glow_FB_${TAG_NAME}.ipa"
rm -rf tmp_payload
echo "  Stripped"

# ─── Bước 5: Copy output ──────────────────────────────────
echo "=== [6/7] Copy output ==="
cp "Glow_FB_${TAG_NAME}.ipa" "$OUTPUT_DIR/"

# ─── Bước 6: Done ─────────────────────────────────────────
echo "=== [7/7] Done ==="
echo ""
echo "──────────────────────────────────────────"
echo "  File:   $OUTPUT_DIR/Glow_FB_${TAG_NAME}.ipa"
echo "  Size:   $(du -h "$OUTPUT_DIR/Glow_FB_${TAG_NAME}.ipa" | cut -f1)"
echo "  Name:   $DISPLAY_NAME"
echo "  Bundle: $BUNDLE_ID"
echo "──────────────────────────────────────────"
echo ""
echo "Upload:  curl -F \"file=@$OUTPUT_DIR/Glow_FB_${TAG_NAME}.ipa\" https://filebin.net"
echo "Server:  cd $OUTPUT_DIR && python3 -m http.server 8080"
