#!/usr/bin/env bash
# Bootstrap a local dev environment for Padelnomics.
#
# Usage: ./scripts/dev_setup.sh
#
# Checks prerequisites, installs deps, creates .env, runs migrations,
# seeds test data, and builds CSS.

set -euo pipefail

cd "$(dirname "$0")/../.."

# -- Colors & helpers -------------------------------------------------------

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
BOLD='\033[1m'
NC='\033[0m'

info()  { echo -e "${BLUE}==>${NC} ${BOLD}$1${NC}"; }
ok()    { echo -e "${GREEN} ✓${NC}  $1"; }
warn()  { echo -e "${YELLOW} !${NC}  $1"; }
fail()  { echo -e "${RED} ✗${NC}  $1"; exit 1; }

# -- Prerequisites -----------------------------------------------------------

info "Checking prerequisites"

command -v python3 >/dev/null 2>&1 || fail "python3 not found. Install Python 3.12+."
command -v uv      >/dev/null 2>&1 || fail "uv not found. Install: https://docs.astral.sh/uv/getting-started/installation/"

PYTHON_VERSION=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
ok "python3 ${PYTHON_VERSION}"
ok "uv $(uv --version 2>/dev/null | head -1)"

# -- Install dependencies ----------------------------------------------------

info "Installing Python dependencies"
uv sync
ok "Dependencies installed"

# -- .env --------------------------------------------------------------------

if [ -f .env ]; then
    warn ".env already exists — skipping creation"
else
    info "Creating .env from .env.example"
    cp .env.example .env

    # Auto-generate SECRET_KEY
    SECRET_KEY=$(python3 -c "import secrets; print(secrets.token_hex(32))")
    sed -i "s/^SECRET_KEY=.*/SECRET_KEY=${SECRET_KEY}/" .env
    ok "SECRET_KEY generated"

    # Prompt for optional keys
    echo ""
    echo -e "${BOLD}Optional API keys${NC} (press Enter to skip — everything works without them)"
    echo ""

    read -rp "  Paddle API key (for checkout testing): " PADDLE_API_KEY
    if [ -n "$PADDLE_API_KEY" ]; then
        sed -i "s/^PADDLE_API_KEY=.*/PADDLE_API_KEY=${PADDLE_API_KEY}/" .env
        ok "PADDLE_API_KEY set"

        read -rp "  Paddle client token: " PADDLE_CLIENT_TOKEN
        [ -n "$PADDLE_CLIENT_TOKEN" ] && sed -i "s/^PADDLE_CLIENT_TOKEN=.*/PADDLE_CLIENT_TOKEN=${PADDLE_CLIENT_TOKEN}/" .env
    fi

    read -rp "  Resend API key (for email testing): " RESEND_API_KEY
    if [ -n "$RESEND_API_KEY" ]; then
        sed -i "s/^RESEND_API_KEY=.*/RESEND_API_KEY=${RESEND_API_KEY}/" .env
        ok "RESEND_API_KEY set"
    fi

    echo ""
    ok ".env created"
fi

# -- Migrations ---------------------------------------------------------------

info "Running database migrations"
uv run python -m padelnomics.migrations.migrate
ok "Migrations applied"

# -- Seed data ----------------------------------------------------------------

info "Seeding development data"
uv run python -m padelnomics.scripts.seed_dev_data
ok "Dev data seeded"

# -- Paddle setup (optional) --------------------------------------------------

if grep -q '^PADDLE_API_KEY=.\+' .env 2>/dev/null; then
    echo ""
    read -rp "$(echo -e "${BLUE}==>${NC} Set up Paddle sandbox products? [y/N] ")" SETUP_PADDLE
    if [[ "$SETUP_PADDLE" =~ ^[Yy]$ ]]; then
        uv run python -m padelnomics.scripts.setup_paddle
        ok "Paddle products created"
    fi
fi

# -- CSS build ----------------------------------------------------------------

info "Building CSS"
make css-build
ok "CSS built"

# -- Summary ------------------------------------------------------------------

echo ""
echo -e "${GREEN}${BOLD}Setup complete!${NC}"
echo ""
echo "  Start all services:  ./scripts/dev_run.sh"
echo ""
echo "  URLs:"
echo "    App:        http://localhost:5000"
echo "    Dev login:  http://localhost:5000/auth/dev-login?email=dev@localhost"
echo "    Admin:      http://localhost:5000/admin  (password: admin)"
echo ""
echo "  Seeded accounts:"
echo "    dev@localhost — dev user (use dev-login link above)"
echo ""
echo "  Email:"
if grep -q '^RESEND_API_KEY=.\+' .env 2>/dev/null; then
    echo "    Resend configured — emails sent via API"
    echo "    Test addresses: delivered@resend.dev, bounced@resend.dev"
else
    echo "    No Resend key — emails print to console"
fi
echo ""
