#!/bin/bash
# ============================================================
#  HamPi installer — main entry point
#  Reproducible headless Pi ham station (KM7HBN-style build)
# ============================================================
set -euo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$ROOT"

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'

banner() {
    echo -e "${CYAN}"
    cat << 'EOF'
 
_|    _|                            _|_|_|    _|  
_|    _|    _|_|_|  _|_|_|  _|_|    _|    _|      
_|_|_|_|  _|    _|  _|    _|    _|  _|_|_|    _|  
_|    _|  _|    _|  _|    _|    _|  _|        _|  
_|    _|    _|_|_|  _|    _|    _|  _|        _|  

EOF
    echo -e "${NC}"
    echo "  Headless Pi ham station installer"
    echo
}

log()  { echo -e "${GREEN}[+]${NC} $*"; }
warn() { echo -e "${YELLOW}[!]${NC} $*"; }
err()  { echo -e "${RED}[x]${NC} $*"; exit 1; }

need_root_hint() {
    if [[ $EUID -eq 0 ]]; then
        warn "Running as root. Prefer a normal user with passwordless sudo."
    fi
}

load_config() {
    if [[ ! -f "$ROOT/config.env" ]]; then
        err "Missing config.env — copy config.env.example and edit it first:
  cp config.env.example config.env
  nano config.env"
    fi
    # shellcheck source=/dev/null
    source "$ROOT/config.env"
    : "${CALLSIGN:?CALLSIGN not set in config.env}"
    : "${HAM_USER:?HAM_USER not set in config.env}"
    : "${HAM_HOME:?HAM_HOME not set in config.env}"
    log "Station: ${CALLSIGN}  User: ${HAM_USER}  Default modem: ${DEFAULT_MODEM:-graywolf}"
}

run_step() {
    local name="$1"
    local script="$ROOT/scripts/$2"
    echo
    echo "============================================================"
    log "Step: $name"
    echo "============================================================"
    if [[ ! -x "$script" ]]; then
        chmod +x "$script" 2>/dev/null || true
    fi
    # shellcheck disable=SC1090
    bash "$script"
}

main() {
    banner
    need_root_hint
    load_config

    export ROOT
    # Export all config.env vars for child scripts
    set -a
    # shellcheck source=/dev/null
    source "$ROOT/config.env"
    set +a

    run_step "Packages"              "01-packages.sh"
    run_step "udev friendly names"   "02-udev.sh"
    run_step "Direwolf"              "03-direwolf.sh"
    run_step "LinBPQ"                "04-linbpq.sh"
    run_step "Pat (Winlink client)"  "05-pat.sh"
    run_step "GPS + chrony"          "06-gps-chrony.sh"
    run_step "systemd services"      "07-services.sh"
    run_step "Launcher + shell"      "08-launcher.sh"

    echo
    echo "============================================================"
    log "HamPi install complete"
    echo "============================================================"
    echo
    echo "  Next steps:"
    echo "    1. Log out/in (or: source ~/.bashrc)"
    echo "    2. ham status"
    echo "    3. ham graywolf   # or: ham direwolf"
    echo "    4. Open Graywolf  http://$(hostname -I | awk '{print $1}'):${PORT_GRAYWOLF_WEB:-8080}"
    echo "    5. Open Pat       http://$(hostname -I | awk '{print $1}'):${PORT_PAT_HTTP:-8081}"
    echo "    6. Open LinBPQ    http://$(hostname -I | awk '{print $1}'):${PORT_LINBPQ_HTTP:-8090}"
    echo
    echo "  Graywolf AGW + KISS and audio devices are configured in its web UI."
    echo "  See docs/NOTES.md for post-install checklist."
    echo
}

main "$@"
