#!/bin/bash
# ─────────────────────────────────────────────────────────────
# Forge post-create hook
# Runs automatically after `forge new` creates a project.
# Can also be run manually: forge hooks run post-create
#
# Receives env vars from forge new:
#   FORGE_PROJECT_NAME
#   FORGE_PROJECT_TYPE
#   FORGE_PROJECT_PATH
#   FORGE_PROJECT_SLUG
# ─────────────────────────────────────────────────────────────

set -e

PROJECT_NAME="${FORGE_PROJECT_NAME:-$(basename "$(pwd)")}"
PROJECT_TYPE="${FORGE_PROJECT_TYPE:-unknown}"
PROJECT_PATH="${FORGE_PROJECT_PATH:-$(pwd)}"

echo ""
echo "✦ Forge post-create: $PROJECT_NAME ($PROJECT_TYPE)"
echo ""

# ── 1. Install pre-commit hook ───────────────────────────────
HOOKS_SOURCE="${HOME}/Projects/.forge/hooks/pre-commit"
HOOKS_DEST="${PROJECT_PATH}/.git/hooks/pre-commit"

if [ -f "$HOOKS_SOURCE" ]; then
  cp "$HOOKS_SOURCE" "$HOOKS_DEST"
  chmod +x "$HOOKS_DEST"
  echo "  ✓ pre-commit hook installed"
else
  echo "  ⚠  pre-commit hook source not found at $HOOKS_SOURCE"
fi

# ── 2. Create secrets directory ──────────────────────────────
SECRETS_DIR="${HOME}/Projects/.secrets/${FORGE_PROJECT_SLUG:-$PROJECT_NAME}"
if [ ! -d "$SECRETS_DIR" ]; then
  mkdir -p "$SECRETS_DIR"
  touch "$SECRETS_DIR/.env"
  echo "  ✓ Secrets directory created at $SECRETS_DIR"
  echo "    Add your environment variables to $SECRETS_DIR/.env"
else
  echo "  ✓ Secrets directory already exists"
fi

# ── 3. Type-specific setup ───────────────────────────────────
case "$PROJECT_TYPE" in

  flutter)
    echo "  → Flutter project detected"
    if command -v flutter &> /dev/null; then
      echo "  ✓ Flutter available — run: flutter pub get"
    else
      echo "  ⚠  Flutter not found in PATH"
    fi
    ;;

  web)
    echo "  → Web project detected"
    if [ -f "${PROJECT_PATH}/package.json" ]; then
      echo "  ✓ package.json found — run: npm install"
    fi
    # Create .env.local from template if missing
    ENV_LOCAL="${PROJECT_PATH}/.env.local"
    if [ ! -f "$ENV_LOCAL" ]; then
      cat > "$ENV_LOCAL" << 'ENVTEMPLATE'
# Local environment variables
# Copy values from ~/Projects/.secrets/<project>/.env
# Never commit this file.
VITE_SUPABASE_URL=
VITE_SUPABASE_ANON_KEY=
ENVTEMPLATE
      echo "  ✓ .env.local created (add your Supabase keys)"
    fi
    # Ensure .env.local is gitignored
    GITIGNORE="${PROJECT_PATH}/.gitignore"
    if [ -f "$GITIGNORE" ] && ! grep -q ".env.local" "$GITIGNORE"; then
      echo ".env.local" >> "$GITIGNORE"
      echo "  ✓ .env.local added to .gitignore"
    fi
    ;;

  python)
    echo "  → Python project detected"
    if command -v python3 &> /dev/null; then
      PYTHON_VERSION=$(python3 --version 2>&1)
      echo "  ✓ $PYTHON_VERSION available"
    fi
    if [ -f "${PROJECT_PATH}/pyproject.toml" ]; then
      echo "  ✓ pyproject.toml found — run: pip install -e .[dev]"
    fi
    ;;

  *)
    echo "  → Unknown type — no type-specific setup"
    ;;
esac

# ── 4. Initial forge validate ────────────────────────────────
echo ""
echo "  Running initial manifest validation..."
if forge manifest "$PROJECT_NAME" --validate 2>/dev/null; then
  echo "  ✓ manifest.yaml valid"
else
  echo "  ⚠  manifest.yaml has warnings — run: forge manifest $PROJECT_NAME --validate"
fi

# ── 5. Summary ───────────────────────────────────────────────
echo ""
echo "✦ $PROJECT_NAME is ready."
echo ""
echo "  Next steps:"
echo "    forge inspect $PROJECT_NAME    — view project detail"
echo "    forge health  $PROJECT_NAME    — run health checks"
echo "    cd $PROJECT_PATH               — open project"
echo ""
