#!/bin/sh
# =============================================================
#  Installer untuk shared hosting (SSH / Terminal server)
#  Cara pakai:   unzip di folder aplikasi, lalu
#                bash install.sh
# =============================================================
set -e

cd "$(dirname "$0")"
echo "==> Direktori: $(pwd)"

php -v | head -1

if [ ! -f artisan ]; then
    echo "ERROR: artisan tidak ditemukan. Jalankan file ini dari root project (bukan subfolder)."
    exit 1
fi

# -- .env produksi --
if [ ! -f .env ]; then
    echo "==> Membuat .env dari .env.production.example"
    cp .env.production.example .env
    echo "    PENTING: isi DB_DATABASE / DB_USERNAME / DB_PASSWORD / MAIL_* di file .env"
else
    echo "==> .env sudah ada, dilewati"
fi

# -- dependency tanpa package dev --
COMPOSER_BIN="$(command -v composer 2>/dev/null || true)"
if [ -z "$COMPOSER_BIN" ] && [ -x "$HOME/bin/composer" ]; then
    COMPOSER_BIN="$HOME/bin/composer"
fi
if [ -z "$COMPOSER_BIN" ] && [ -f "$PWD/composer.phar" ]; then
    COMPOSER_BIN="$PWD/composer.phar"
    COMPOSER_RUN="php"
fi

if [ -z "$COMPOSER_BIN" ]; then
    echo "==> Composer tidak ditemukan. Mengunduh Composer..."
    mkdir -p "$HOME/bin"
    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php composer-setup.php --install-dir="$HOME/bin" --filename=composer --quiet
    rm -f composer-setup.php
    COMPOSER_BIN="$HOME/bin/composer"
fi
COMPOSER_RUN="${COMPOSER_RUN:-}"

run_composer() {
    if [ -n "$COMPOSER_RUN" ]; then
        "$COMPOSER_RUN" "$COMPOSER_BIN" "$@"
    else
        "$COMPOSER_BIN" "$@"
    fi
}

if [ ! -d vendor ]; then
    echo "==> composer install --no-dev (dengan --no-scripts, karena proc_open sering nonaktif di shared hosting)"
    run_composer install --no-dev --no-scripts --optimize-autoloader --no-interaction
else
    echo "==> vendor sudah ada, dilewati (jalankan 'composer install --no-dev' bila perlu)"
fi

# bootstrap/cache/packages.php & services.php sengaja TIDAK disertakan di paket rilis
# (bisa berisi paket dev). Generate ulang dari vendor server untuk menghindari
# error "Class ... not found". pakai artisan langsung (tanpa proc_open).
if [ ! -f bootstrap/cache/packages.php ]; then
    echo "==> Generate package discovery..."
    php artisan package:discover --ansi || echo "(package:discover diabaikan)"
fi

# -- APP_KEY --
if ! grep -q '^APP_KEY=base64:' .env; then
    echo "==> Membuat APP_KEY"
    php artisan key:generate --force
fi

# -- permission (Linux only) --
echo "==> Set permission storage, bootstrap/cache, public/uploads"
chmod -R 775 storage bootstrap/cache public/uploads 2>/dev/null || true

# -- database --
echo "==> php artisan migrate --seed --force"
php artisan migrate --seed --force

# -- cache produksi --
echo "==> config:cache / route:cache / view:cache"
php artisan config:cache
php artisan route:cache
php artisan view:cache

echo
echo "============================================================"
echo " SELESAI!  https://$(grep '^APP_URL=' .env | cut -d= -f2 | tr -d '\"' | sed 's#https\?://##')"
echo " Admin    : /admin   (seed: admin@example.com / password)"
echo " >>> GANTI PASSWORD ADMIN SEGERA <<<"
echo " Contoh: php artisan tinker --execute=\"App\Models\User::where('email','admin@example.com')->first()->update(['password'=>bcrypt('password-baru')]);\""
echo "============================================================"