#!/bin/bash
# Lv10 Open - macOS セットアップ
# ローカルファイル・フォルダをブラウザから開く

echo ""
echo "========================================"
echo "  Lv10 Open セットアップ (macOS)"
echo "  ローカルファイル・フォルダをブラウザから開く"
echo "========================================"
echo ""

APP_DIR="$HOME/Applications/Lv10Open.app"
CONTENTS="$APP_DIR/Contents"
MACOS="$CONTENTS/MacOS"
RESOURCES="$CONTENTS/Resources"

# .appバンドル作成
mkdir -p "$MACOS" "$RESOURCES"

# Info.plist（URLスキーム登録）
cat > "$CONTENTS/Info.plist" << 'PLIST'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleIdentifier</key>
    <string>jp.lv10.open</string>
    <key>CFBundleName</key>
    <string>Lv10Open</string>
    <key>CFBundleVersion</key>
    <string>1.0</string>
    <key>CFBundleExecutable</key>
    <string>lv10open</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>Lv10 Open Protocol</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>lv10open</string>
            </array>
        </dict>
    </array>
</dict>
</plist>
PLIST

# 実行スクリプト
cat > "$MACOS/lv10open" << 'SCRIPT'
#!/bin/bash
# lv10open:// protocol handler for macOS

url="$1"

# Remove protocol prefix
path="${url#lv10open://}"
path="${path#lv10open:}"

# Remove leading slashes (keep one for absolute path)
path="/${path#/}"
path="/${path#/}"

# URL decode
path=$(python3 -c "import urllib.parse, sys; print(urllib.parse.unquote(sys.argv[1]))" "$path" 2>/dev/null || echo "$path")

# Security: only allow /Users, /Volumes, /tmp
case "$path" in
    /Users/*|/Volumes/*|/tmp/*) ;;
    *)
        osascript -e "display dialog \"許可されていないパスです: $path\" buttons {\"OK\"} with icon caution with title \"lv10open\""
        exit 1
        ;;
esac

# Security: no path traversal
if echo "$path" | grep -q '\.\.'; then
    osascript -e "display dialog \"不正なパスです: $path\" buttons {\"OK\"} with icon caution with title \"lv10open\""
    exit 1
fi

# Open
if [ -d "$path" ]; then
    open "$path"
elif [ -f "$path" ]; then
    open "$path"
else
    osascript -e "display dialog \"パスが見つかりません: $path\" buttons {\"OK\"} with icon caution with title \"lv10open\""
fi
SCRIPT

chmod +x "$MACOS/lv10open"

# URLスキームを登録
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -R "$APP_DIR" 2>/dev/null

echo "[OK] セットアップ完了しました！"
echo ""
echo "ブラウザを再起動すると、ローカルファイルリンクが"
echo "クリックで開けるようになります。"
echo ""
echo "アンインストール: rm -rf ~/Applications/Lv10Open.app"
echo ""
