#!/bin/bash
# Scaffolds a new webapp from template
# Usage: ./scripts/scaffold <app-name> [output-dir]
#
# Creates app directory, copies template, sets up Neon branch
# Requires: NEON_API_KEY, NEON_PROJECT_ID env vars

set -e

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
TEMPLATE_DIR="$SKILL_DIR/assets"

APP_NAME="${1:-}"
OUTPUT_DIR="${2:-$(pwd)/$APP_NAME}"

if [ -z "$APP_NAME" ]; then
    echo "Usage: $0 <app-name> [output-dir]"
    echo "Example: $0 my-todo-app ."
    exit 1
fi

# resolve "." to absolute path
if [ "$OUTPUT_DIR" = "." ]; then
    OUTPUT_DIR="$(pwd)"
fi

# the marker is written after the template copy and removed once Neon setup
# succeeds, so its presence proves a prior run of THIS script died mid-way -
# never treat someone else's Rust project as a failed scaffold
MARKER="$OUTPUT_DIR/.scaffold-incomplete"
if [ -f "$OUTPUT_DIR/Cargo.toml" ]; then
    if [ -f "$MARKER" ]; then
        echo "=== Prior scaffold incomplete, rerunning Neon setup ==="
        cd "$OUTPUT_DIR"
        APP_NAME="$APP_NAME" ./scripts/neon-setup
        rm -f "$MARKER"
        exit 0
    fi
    echo "Error: Directory already contains an app: $OUTPUT_DIR"
    exit 1
fi

echo "=== Scaffolding: $APP_NAME ==="
echo "Template: $TEMPLATE_DIR"
echo "Output: $OUTPUT_DIR"
echo ""

# copy template (exclude build artifacts)
mkdir -p "$OUTPUT_DIR"
cp -r "$TEMPLATE_DIR"/* "$OUTPUT_DIR/"
rm -rf "$OUTPUT_DIR/target" "$OUTPUT_DIR/Cargo.lock" "$OUTPUT_DIR/.env"
touch "$MARKER"

echo "Template copied"
echo ""

# setup neon branch
echo "=== Setting up Neon database ==="
cd "$OUTPUT_DIR"
APP_NAME="$APP_NAME" ./scripts/neon-setup
rm -f "$MARKER"

echo ""
echo "=== Done ==="
echo "cd $OUTPUT_DIR"
echo ""
echo "Next steps:"
echo "  1. Edit src/models.rs - define your data models"
echo "  2. Edit migrations/001_init.sql - add your schema"
echo "  3. Edit src/main.rs - add route handlers"
echo "  4. Run: $SKILL_DIR/scripts/validate ."
