#!/bin/bash
# Setup pertama kali: clone repo + konfigurasi Laravel + build frontend.
# Pemakaian:
#   bash scripts/deploy/git-clone-setup.sh \
#     https://mcbdl.site \
#     https://padeberkinem.ramaboedi.com \
#     127.0.0.1 \
#     rama3823_padeberkinem \
#     rama3823_padeberkinem \
#     'PASSWORD_DB' \
#     [JWT_SECRET]
#
# Repo default: https://github.com/fauzi041169/PADEBERKINEM.git
# Override: REPO_URL=... BRANCH=main bash scripts/deploy/git-clone-setup.sh ...

set -euo pipefail

FRONT_DOMAIN="${1:-}"
API_DOMAIN="${2:-}"
DB_HOST="${3:-127.0.0.1}"
DB_NAME="${4:-}"
DB_USER="${5:-}"
DB_PASS="${6:-}"
JWT_SECRET="${7:-}"

REPO_URL="${REPO_URL:-https://github.com/fauzi041169/PADEBERKINEM.git}"
BRANCH="${BRANCH:-main}"
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"

if [ -z "$FRONT_DOMAIN" ] || [ -z "$API_DOMAIN" ] || [ -z "$DB_NAME" ] || [ -z "$DB_USER" ] || [ -z "$DB_PASS" ]; then
  echo "Pemakaian:"
  echo "  bash scripts/deploy/git-clone-setup.sh <FRONT_URL> <API_URL> <DB_HOST> <DB_NAME> <DB_USER> <DB_PASS> [JWT_SECRET]"
  echo ""
  echo "Contoh (setelah git clone ke ~/public_html/PADEBERKINEM):"
  echo "  cd ~/public_html/PADEBERKINEM"
  echo "  bash scripts/deploy/git-clone-setup.sh \\"
  echo "    https://mcbdl.site \\"
  echo "    https://padeberkinem.ramaboedi.com \\"
  echo "    127.0.0.1 rama3823_padeberkinem rama3823_padeberkinem 'PASSWORD_DB'"
  exit 1
fi

if [ ! -d "$ROOT/.git" ]; then
  echo "ERROR: Folder ini bukan git repo."
  echo "Clone dulu:"
  echo "  cd ~/public_html"
  echo "  git clone -b $BRANCH $REPO_URL PADEBERKINEM"
  echo "  cd PADEBERKINEM"
  exit 1
fi

if [ -z "$JWT_SECRET" ]; then
  JWT_SECRET="$(head -c 32 /dev/urandom | od -An -tx1 | tr -d ' \n')"
fi

API="$ROOT/api"
FE="$ROOT/frontend"

echo "==> Checkout branch $BRANCH"
git -C "$ROOT" fetch origin
git -C "$ROOT" checkout "$BRANCH"
git -C "$ROOT" pull --ff-only origin "$BRANCH"

echo "==> Menulis api/.env"
cat > "$API/.env" <<EOF
APP_NAME=PADEBERKINEM
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=$API_DOMAIN
FRONTEND_URL=$FRONT_DOMAIN

DB_CONNECTION=mysql
DB_HOST=$DB_HOST
DB_PORT=3306
DB_DATABASE=$DB_NAME
DB_USERNAME=$DB_USER
DB_PASSWORD=$DB_PASS

JWT_SECRET=$JWT_SECRET
JWT_EXPIRES_IN=15m
JWT_REFRESH_EXPIRES_IN=7d
SEED_DEMO_PASSWORD=Admin123!

SESSION_DRIVER=cookie
CACHE_STORE=file
QUEUE_CONNECTION=sync
STORAGE_PATH=
EOF

echo "==> Menulis frontend/.env.local"
cat > "$FE/.env.local" <<EOF
NODE_ENV=production
NEXT_PUBLIC_API_URL=/api
NEXT_PUBLIC_APP_NAME=PADEBERKINEM
NEXT_PUBLIC_APP_URL=$FRONT_DOMAIN
NEXT_PUBLIC_GOOGLE_CLIENT_ID=
BACKEND_INTERNAL_URL=$API_DOMAIN/api
EOF

echo "==> Install Laravel (Composer)"
cd "$API"
if [ ! -f composer.phar ]; then
  curl -sS https://getcomposer.org/installer | php
fi
php composer.phar config policy.advisories.block false || true
php composer.phar install --no-dev --optimize-autoloader --no-interaction
php artisan key:generate --force
mkdir -p bootstrap/cache storage/framework/cache/data storage/framework/sessions storage/framework/views storage/logs
chmod -R 775 bootstrap/cache storage || true
php artisan app:seed-minimal || echo "(seed dilewati — mungkin sudah ada data)"

echo "==> Siapkan server.js frontend production"
cp -f "$ROOT/scripts/deploy-package/frontend-server.js" "$FE/server.js"

echo "==> Install & build frontend (Next.js)"
cd "$FE"
if [ -f /home/*/nodevenv/*/bin/activate ] 2>/dev/null; then
  :
fi
# Aktifkan virtualenv Node cPanel jika ada (path umum RumahWeb)
for cand in \
  "$HOME/nodevenv/public_html/PADEBERKINEM/frontend/20/bin/activate" \
  "$HOME/nodevenv/public_html/PADEBERKINEM/frontend/18/bin/activate"
do
  if [ -f "$cand" ]; then
    # shellcheck disable=SC1090
    source "$cand"
    echo "Node virtualenv: $cand"
    break
  fi
done

export NODE_OPTIONS="${NODE_OPTIONS:---max-old-space-size=1536}"
npm ci --omit=dev || npm install --omit=dev
npm run build

echo ""
echo "=============================================="
echo " SETUP GIT SELESAI"
echo "=============================================="
echo "Document root API : $API/public"
echo "Root frontend     : $FE  (startup: server.js)"
echo ""
echo "cPanel:"
echo "  1) Domain API → $API/public  (PHP, BUKAN Node.js App)"
echo "  2) Node.js App frontend → Application root = $FE, startup = server.js"
echo "  3) Hapus Node.js App backend lama (folder backend/)"
echo ""
echo "Update berikutnya:"
echo "  bash scripts/deploy/git-update.sh"
echo "=============================================="
