#!/bin/bash
#
# RPOOL VPS Media Server — Installation Script
# Server: server.rpool.id (Apache2)
#
# This sets up the media proxy alongside the existing stems server.
# Deploy the vps_media/ folder to /var/www/media/ on the VPS.
#
# Usage: sudo bash install_media.sh
#

set -e

echo "╔══════════════════════════════════════════╗"
echo "║   RPOOL VPS Media Server Setup           ║"
echo "║   server.rpool.id/media/ (Apache2)       ║"
echo "╚══════════════════════════════════════════╝"
echo ""

# ── Variables ──
MEDIA_DIR="/var/www/media"
DOMAIN="server.rpool.id"

# ── Create directories ──
echo "[1/5] Creating directories..."
mkdir -p "$MEDIA_DIR"
mkdir -p /tmp/rpool_media

# ── Copy files ──
echo "[2/5] Copying media server files..."
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

if [ -f "$SCRIPT_DIR/stream.php" ]; then
    cp "$SCRIPT_DIR/config.php" "$MEDIA_DIR/"
    cp "$SCRIPT_DIR/helpers.php" "$MEDIA_DIR/"
    cp "$SCRIPT_DIR/stream.php" "$MEDIA_DIR/"
    cp "$SCRIPT_DIR/download.php" "$MEDIA_DIR/"
    echo "   ✅ Files copied from $SCRIPT_DIR"
else
    echo "   ⚠️  Run this from the vps_media/ directory, or copy files manually to $MEDIA_DIR"
fi

# ── Download artwork from rpool.id ──
echo "   Downloading artwork from rpool.id..."
curl -sS -o "$MEDIA_DIR/artwork_rpool.png" "https://rpool.id/artwork_rpool.png" 2>/dev/null \
    && echo "   ✅ Artwork downloaded" \
    || echo "   ⚠️  Artwork download failed — will be fetched on first download request"

# ── Set permissions ──
echo "[3/5] Setting permissions..."
chown -R www-data:www-data "$MEDIA_DIR"
chmod -R 755 "$MEDIA_DIR"
chmod 777 /tmp/rpool_media

# ── Install getID3 for download tagging ──
echo "[4/5] Installing getID3 for ID3 tagging..."
if command -v composer &> /dev/null; then
    cd "$MEDIA_DIR"
    if [ ! -f composer.json ]; then
        cat > composer.json << 'EOF'
{
    "require": {
        "james-heinrich/getid3": "^1.9"
    }
}
EOF
    fi
    composer install --no-dev --optimize-autoloader 2>/dev/null || echo "   ⚠️  composer install failed — downloads will work without ID3 tags"
else
    echo "   ⚠️  Composer not installed — downloads will work without ID3 tags"
    echo "   Install: apt install composer && cd $MEDIA_DIR && composer require james-heinrich/getid3"
fi

# ── Apache2 config ──
echo "[5/5] Configuring Apache2..."

# Enable required Apache modules
a2enmod proxy_fcgi setenvif rewrite headers alias 2>/dev/null || true

# Detect PHP-FPM version on Ubuntu 24
PHP_FPM_SOCK="/run/php/php8.3-fpm.sock"
if [ ! -S "$PHP_FPM_SOCK" ]; then
    PHP_FPM_SOCK="/run/php/php8.2-fpm.sock"
fi
if [ ! -S "$PHP_FPM_SOCK" ]; then
    # Find any available PHP-FPM socket
    PHP_FPM_SOCK=$(find /run/php/ -name "php*-fpm.sock" 2>/dev/null | head -1)
fi
echo "   PHP-FPM socket: $PHP_FPM_SOCK"

# Check if media Alias already exists in Apache config
APACHE_CONF="/etc/apache2/sites-available/rpool-stems.conf"
APACHE_MEDIA_CONF="/etc/apache2/conf-available/rpool-media.conf"

# Create standalone Apache config for /media/
cat > "$APACHE_MEDIA_CONF" << APACHECONF
# RPOOL Media Server — stream & download proxy
# server.rpool.id/media/

Alias /media /var/www/media

<Directory /var/www/media>
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted

    # PHP-FPM
    <FilesMatch \.php\$>
        SetHandler "proxy:unix:${PHP_FPM_SOCK}|fcgi://localhost"
    </FilesMatch>

    # Disable output compression for streaming
    SetEnv no-gzip 1
    SetEnv dont-vary 1

    # Long timeout for large file streaming
    TimeOut 600
</Directory>
APACHECONF

# Enable the config
a2enconf rpool-media 2>/dev/null || true

# Also create .htaccess in media dir for extra safety
cat > "$MEDIA_DIR/.htaccess" << 'HTACCESS'
# RPOOL Media Server
Options -Indexes

# Disable compression for audio streaming
SetEnv no-gzip 1
SetEnv dont-vary 1
RemoveOutputFilter DEFLATE

# CORS headers
<IfModule mod_headers.c>
    Header set Access-Control-Allow-Methods "GET, OPTIONS"
    Header set Access-Control-Allow-Headers "Range, Authorization"
    Header set Access-Control-Expose-Headers "Content-Range, Content-Length, Accept-Ranges"
</IfModule>

# Long timeout
<IfModule mod_reqtimeout.c>
    RequestReadTimeout header=20-40,MinRate=500 body=0
</IfModule>
HTACCESS

echo "   ✅ Apache config created: $APACHE_MEDIA_CONF"

# Test & reload Apache
apache2ctl configtest && systemctl reload apache2
echo ""
echo "╔══════════════════════════════════════════╗"
echo "║   ✅ Media Server Ready!                 ║"
echo "║                                          ║"
echo "║   Stream: /media/stream.php              ║"
echo "║   Download: /media/download.php          ║"
echo "║                                          ║"
echo "║   Test:                                  ║"
echo "║   curl https://server.rpool.id/media/    ║"
echo "║        stream.php                        ║"
echo "╚══════════════════════════════════════════╝"
