#!/bin/bash
# Shared helpers for HamPi install scripts
# shellcheck disable=SC2034

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

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

# Replace __PLACEHOLDER__ tokens in a file using current environment
# Placeholders match config.env variable names uppercased with __ around them
template_install() {
    local src="$1"
    local dst="$2"
    local tmp
    tmp="$(mktemp)"
    cp "$src" "$tmp"

    # Core substitutions
    local pairs=(
        "__CALLSIGN__=${CALLSIGN}"
        "__APRS_SSID__=${APRS_SSID:-12}"
        "__NODE_SSID__=${NODE_SSID:-7}"
        "__BBS_SSID__=${BBS_SSID:-1}"
        "__CHAT_SSID__=${CHAT_SSID:-11}"
        "__APRS_PASSCODE__=${APRS_PASSCODE:-}"
        "__GRID__=${GRID}"
        "__LAT__=${LAT}"
        "__LON__=${LON}"
        "__HAM_USER__=${HAM_USER}"
        "__HAM_HOME__=${HAM_HOME}"
        "__AIOC_VID__=${AIOC_VID:-1209}"
        "__AIOC_PID__=${AIOC_PID:-7388}"
        "__GPS_VID__=${GPS_VID:-1546}"
        "__GPS_PID__=${GPS_PID:-01a7}"
        "__PORT_DIREWOLF_AGW__=${PORT_DIREWOLF_AGW:-8000}"
        "__PORT_DIREWOLF_KISS__=${PORT_DIREWOLF_KISS:-8001}"
        "__PORT_GRAYWOLF_WEB__=${PORT_GRAYWOLF_WEB:-8080}"
        "__PORT_GRAYWOLF_KISS__=${PORT_GRAYWOLF_KISS:-8001}"
        "__PORT_LINBPQ_TELNET__=${PORT_LINBPQ_TELNET:-8010}"
        "__PORT_LINBPQ_HTTP__=${PORT_LINBPQ_HTTP:-8090}"
        "__PORT_PAT_HTTP__=${PORT_PAT_HTTP:-8081}"
        "__PORT_GPSD__=${PORT_GPSD:-2947}"
    )

    local p key val
    for p in "${pairs[@]}"; do
        key="${p%%=*}"
        val="${p#*=}"
        # Escape sed special chars in val minimally
        val_escaped="$(printf '%s' "$val" | sed -e 's/[\/&]/\\&/g')"
        sed -i "s/${key}/${val_escaped}/g" "$tmp"
    done

    mkdir -p "$(dirname "$dst")"
    if [[ -f "$dst" ]]; then
        cp "$dst" "${dst}.bak.$(date +%Y%m%d%H%M%S)" 2>/dev/null || true
    fi
    cp "$tmp" "$dst"
    rm -f "$tmp"
    log "Installed $dst"
}

require_cmd() {
    command -v "$1" >/dev/null 2>&1 || err "Required command not found: $1"
}
