#!/usr/bin/env bash
# =============================================================================
# merge-to-laravel.sh
#
# Merges the Alpine.js + Tailwind CSS boilerplate into an existing Laravel project.
#
# Usage:
#   bash scripts/merge-to-laravel.sh /path/to/laravel-project
#
# What it does:
#   1. Copies src/assets/css/app.css  → resources/css/app.css
#   2. Copies src/assets/js/          → resources/js/  (alpine.ts, app.ts)
#   3. Copies Blade component partials → resources/views/components/
#   4. Prints required package.json additions
#   5. Prints vite.config.js changes needed
# =============================================================================

set -euo pipefail

BOILERPLATE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
LARAVEL_ROOT="${1:-}"

# ---------------------------------------------------------------------------
# Validate
# ---------------------------------------------------------------------------
if [[ -z "$LARAVEL_ROOT" ]]; then
  echo "Usage: bash scripts/merge-to-laravel.sh /path/to/laravel-project"
  exit 1
fi

if [[ ! -f "$LARAVEL_ROOT/artisan" ]]; then
  echo "Error: '$LARAVEL_ROOT' does not appear to be a Laravel project (artisan not found)."
  exit 1
fi

echo ""
echo "========================================================="
echo "  Merging boilerplate → $LARAVEL_ROOT"
echo "========================================================="
echo ""

# ---------------------------------------------------------------------------
# 1. CSS
# ---------------------------------------------------------------------------
CSS_SRC="$BOILERPLATE_DIR/src/assets/css/app.css"
CSS_DST="$LARAVEL_ROOT/resources/css/app.css"

if [[ -f "$CSS_DST" ]]; then
  # Back up existing file before overwriting
  cp "$CSS_DST" "${CSS_DST}.bak"
  echo "⊙ Backed up existing resources/css/app.css → app.css.bak"
fi

cp "$CSS_SRC" "$CSS_DST"
echo "✓ resources/css/app.css"

# ---------------------------------------------------------------------------
# 2. JS / TS
# ---------------------------------------------------------------------------
JS_SRC="$BOILERPLATE_DIR/src/assets/js/"
JS_DST="$LARAVEL_ROOT/resources/js/"

mkdir -p "$JS_DST"

for file in alpine.ts app.ts; do
  if [[ -f "$JS_DST/$file" ]]; then
    cp "$JS_DST/$file" "${JS_DST}${file}.bak"
    echo "⊙ Backed up existing resources/js/$file → ${file}.bak"
  fi
  cp "$JS_SRC/$file" "$JS_DST/$file"
  echo "✓ resources/js/$file"
done

# ---------------------------------------------------------------------------
# 3. Blade component partials
# ---------------------------------------------------------------------------
BLADE_SRC="$BOILERPLATE_DIR/source/components/application-ui/blade/"
BLADE_DST="$LARAVEL_ROOT/resources/views/components/"

if [[ -d "$BLADE_SRC" ]]; then
  mkdir -p "$BLADE_DST"
  cp -r "$BLADE_SRC"* "$BLADE_DST"
  BLADE_COUNT=$(find "$BLADE_SRC" -name "*.blade.php" | wc -l | tr -d ' ')
  echo "✓ resources/views/components/ ($BLADE_COUNT Blade components)"
else
  echo "⚠ Blade source not found — run: node scripts/generate-blade.mjs first"
fi

# ---------------------------------------------------------------------------
# 4. global.d.ts (TypeScript Alpine window type)
# ---------------------------------------------------------------------------
if [[ -f "$BOILERPLATE_DIR/src/global.d.ts" ]]; then
  cp "$BOILERPLATE_DIR/src/global.d.ts" "$LARAVEL_ROOT/resources/js/global.d.ts"
  echo "✓ resources/js/global.d.ts"
fi

# ---------------------------------------------------------------------------
# Print instructions
# ---------------------------------------------------------------------------
echo ""
echo "========================================================="
echo "  Manual steps required"
echo "========================================================="
echo ""
echo "── 1. Install NPM packages ──────────────────────────────"
echo ""
echo "  npm install -D tailwindcss @tailwindcss/vite alpinejs \\"
echo "    @alpinejs/collapse @tailwindplus/elements \\"
echo "    @types/alpinejs typescript"
echo ""
echo "── 2. Update vite.config.js ─────────────────────────────"
echo ""
cat << 'VITECONFIG'
  import tailwindcss from '@tailwindcss/vite';

  export default defineConfig({
    plugins: [
      laravel({ input: ['resources/css/app.css', 'resources/js/app.ts'] }),
      tailwindcss(),
    ],
  });
VITECONFIG
echo ""
echo "── 3. Update tsconfig.json (add resources to include) ───"
echo ""
echo '  "include": ["resources/js"]'
echo ""
echo "── 4. Reference assets in your Blade layout ─────────────"
echo ""
echo "  @vite(['resources/css/app.css', 'resources/js/app.ts'])"
echo ""
echo "── 5. Enable dark mode class on <html> ──────────────────"
echo ""
echo "  <html lang=\"\{{ str_replace('_', '-', app()->getLocale()) }}\" x-data=\"shell\" :class=\"dark ? 'dark' : ''\">"
echo ""
echo "── 6. Use Blade components ───────────────────────────────"
echo ""
echo "  <x-elements.buttons.01-primary-buttons />"
echo "  <x-navigation.navbars.01-simple-navbar />"
echo "  <x-overlays.modal-dialogs.01-centered-with-single-action />"
echo ""
echo "========================================================="
echo "  Done!"
echo "========================================================="
echo ""
