#!/usr/bin/env bash
set -euo pipefail

# =============================================================================
# Project Setup Script
# Purpose: One-command setup for new developers
# Usage: ./scripts/setup.sh [project-name]
# =============================================================================

PROJECT_NAME="${1:-}"
CURRENT_DIR="$(pwd)"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

log() {
    echo -e "${GREEN}[SETUP]${NC} $1"
}

warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

error() {
    echo -e "${RED}[ERROR]${NC} $1"
    exit 1
}

info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

# Check if we're in the right directory
if [[ ! -f "$PROJECT_ROOT/package.json" ]]; then
    error "Run this script from the project root directory"
fi

log "Starting project setup..."

# 1. Check prerequisites
log "Checking prerequisites..."

if ! command -v pnpm &> /dev/null; then
    if command -v mise &> /dev/null; then
        log "Installing pnpm via mise..."
        mise install pnpm@10.17.0
    else
        error "pnpm not found. Please install pnpm 10.17.0 or install mise first."
    fi
fi

if ! command -v node &> /dev/null; then
    if command -v mise &> /dev/null; then
        log "Installing Node.js via mise..."
        mise install node@22
    else
        error "Node.js not found. Please install Node.js 22+ or install mise first."
    fi
fi

# 2. Install dependencies
log "Installing dependencies..."
pnpm install

# 3. Rename project if name provided
if [[ -n "$PROJECT_NAME" ]]; then
    log "Renaming project to '$PROJECT_NAME'..."
    
    # Update package.json
    pnpm pkg set name="$PROJECT_NAME"
    
    # Update README.md title
    sed -i.bak "s/# Agentic Node + TypeScript Starter/# $PROJECT_NAME/" README.md && rm README.md.bak
    
    info "Project renamed to '$PROJECT_NAME'. Update other references manually as needed."
fi

# 4. Initialize git hooks
log "Setting up git hooks..."
pnpm prepare

# 5. Run initial verification
log "Running initial verification..."
if pnpm verify; then
    log "✅ All checks passed!"
else
    warn "Some checks failed. Fix issues before committing."
fi

# 6. Create initial build
log "Creating initial build..."
pnpm build

# 7. Show next steps
echo
log "🎉 Setup complete!"
echo
info "Next steps:"
echo "1. Open the project in your IDE (VS Code recommended)"
echo "2. Review and customize package.json, README.md, and other files"
echo "3. Start developing with: pnpm test:watch"
echo "4. Create your first feature with: pnpm changeset"
echo
info "Available commands:"
echo "  pnpm dev           # Start development mode"
echo "  pnpm test:watch    # Run tests in watch mode"
echo "  pnpm verify        # Run all quality checks"
echo "  pnpm changeset     # Create a changeset for your changes"
echo
info "Documentation:"
echo "  docs/GETTING_STARTED.md - Full setup guide"
echo "  docs/PROCESS.md         - Development workflow"
echo "  CLAUDE.md              - AI development tips"