#!/usr/bin/env bash
# ─────────────────────────────────────────────────────────────────────────────
# Munal LMS — One-Step Development Setup for WSL / Linux
# Usage: ./scripts/setup.sh  (or: make setup)
# ─────────────────────────────────────────────────────────────────────────────

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
cd "${PROJECT_ROOT}"

echo "========================================================"
echo "  Munal LMS — Backend Setup"
echo "========================================================"

# 1. Check / Install Astral uv
if command -v uv &>/dev/null; then
    echo "✔ Found uv: $(uv --version)"
elif [ -f "${HOME}/.local/bin/uv" ]; then
    export PATH="${HOME}/.local/bin:${PATH}"
    echo "✔ Found uv in ~/.local/bin: $(uv --version)"
else
    echo "➜ Installing Astral uv..."
    curl -LsSf https://astral.sh/uv/install.sh | sh
    export PATH="${HOME}/.local/bin:${PATH}"
fi

# Ensure ~/.local/bin is in ~/.bashrc so future shells have uv
if ! grep -qs 'HOME/.local/bin' "${HOME}/.bashrc" 2>/dev/null; then
    echo 'export PATH="$HOME/.local/bin:$PATH"' >> "${HOME}/.bashrc"
fi

# 2. Setup .env from .env.example
if [ ! -f ".env" ]; then
    echo "➜ Creating .env from .env.example..."
    cp .env.example .env
    echo "✔ Created .env"
else
    echo "✔ .env already exists"
fi

# 3. Create virtual environment (.venv) using Python 3.12
echo "➜ Setting up Python 3.12 virtual environment..."
if [ ! -x .venv/bin/python ]; then
    uv venv .venv --python 3.12
else
    echo "✔ Reusing the existing virtual environment"
fi

# 4. Install dependencies (including dev)
echo "➜ Installing dependencies..."
uv sync --frozen --extra dev --link-mode copy

echo "➜ Installing git pre-commit hooks (Ruff format + lint before each commit)..."
.venv/bin/pre-commit install

echo ""
echo "========================================================"
echo "✔ Setup successfully completed!"
echo "========================================================"
echo "Next steps:"
echo "  1. Configure DATABASE_URL in .env for your PostgreSQL server"
echo "  2. Run migrations   : make migrate"
echo "  3. Start dev server : make run"
echo "  4. Open API docs    : http://localhost:8765/docs"
echo "  5. Empty database  : create the initial admin with POST /api/v1/auth/bootstrap"
echo ""
echo "Before pushing: make ci-check   (matches GitHub Actions)"
echo "Or run all tests with: make test"
echo "========================================================"
