#!/usr/bin/env bash
#
# install_for_python.sh - Installs the Python-based radio automation stack.
# Derives its service name from the directory it lives in, prompts for a
# storage path (kept out of the boot drive), writes config.json, creates
# the systemd unit, and sets up cron entries.
#
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DIR_NAME="$(basename "$SCRIPT_DIR")"
SERVICE_NAME="${DIR_NAME}"
SYSTEMD_UNIT="/etc/systemd/system/${SERVICE_NAME}.service"
CONFIG_FILE="${SCRIPT_DIR}/config.json"

echo "=== ${SERVICE_NAME} installer (Python) ==="
echo "Install dir: ${SCRIPT_DIR}"
echo ""

# --- Prompt for storage path ---------------------------------------------
DEFAULT_STORAGE="/srv/radio-storage"
read -rp "Enter storage path for media/state/logs [${DEFAULT_STORAGE}]: " STORAGE_PATH
STORAGE_PATH="${STORAGE_PATH:-$DEFAULT_STORAGE}"
mkdir -p "${STORAGE_PATH}"/{music,podcasts,jingles,announcements,state,playlists,logs}
chown -R liquidsoap:liquidsoap "${STORAGE_PATH}" 2>/dev/null || true

# --- Collect Icecast credentials ------------------------------------------
read -rp "Icecast source port [8000]: " IC_PORT
IC_PORT="${IC_PORT:-8000}"
read -rp "Icecast mount [/radio.mp3]: " IC_MOUNT
IC_MOUNT="${IC_MOUNT:-/radio.mp3}"
read -rp "Icecast source username [sourceadmin]: " IC_USER
IC_USER="${IC_USER:-sourceadmin}"
read -rsp "Icecast source password: " IC_PASS; echo
IC_PASS="${IC_PASS:?Password required}"

# --- gPodder sync (optional) ----------------------------------------------
read -rp "Enable gPodder.net sync? [y/N]: " GPODDER_ENABLE
case "${GPODDER_ENABLE,,}" in
    y|yes)
        read -rp "gPodder host [https://gpodder.net]: " GP_HOST
        GP_HOST="${GP_HOST:-https://gpodder.net}"
        read -rp "gPodder username: " GP_USER
        read -rsp "gPodder password: " GP_PASS; echo
        GP_JSON=$(jq -n --arg h "$GP_HOST" --arg u "$GP_USER" --arg p "$GP_PASS" \
            '{enable:true, host:$h, username:$u, password:$p}')
        ;;
    *)
        GP_JSON='{"enable":false,"host":"","username":"","password":""}'
        ;;
esac

# --- Write config.json -----------------------------------------------------
cat > "$CONFIG_FILE" <<EOF
{
  "storage": "${STORAGE_PATH}",
  "icecast": {
    "host": "127.0.0.1",
    "port": ${IC_PORT},
    "mount": "${IC_MOUNT}",
    "username": "${IC_USER}",
    "password": "${IC_PASS}"
  },
  "gpodder": ${GP_JSON}
}
EOF
chmod 600 "$CONFIG_FILE"
echo "Wrote ${CONFIG_FILE}"

# --- Dependencies -----------------------------------------------------------
echo "Installing Python dependencies..."
pip3 install feedparser requests 2>/dev/null || pip install feedparser requests

# --- Systemd unit ------------------------------------------------------------
cat > "$SYSTEMD_UNIT" <<EOF
[Unit]
Description=${SERVICE_NAME} radio automation (liquidsoap)
After=network.target icecast2.service

[Service]
User=liquidsoap
WorkingDirectory=${SCRIPT_DIR}
ExecStart=/usr/bin/liquidsoap ${SCRIPT_DIR}/station.liq
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable "${SERVICE_NAME}"
echo "Enabled systemd unit: ${SERVICE_NAME}"

# --- Cron --------------------------------------------------------------------
CRON_FETCH="0 * * * * cd ${SCRIPT_DIR} && /usr/bin/python3 fetch_podcasts.py >> ${STORAGE_PATH}/logs/cron.log 2>&1"
CRON_PLAYLISTS="30 * * * * cd ${SCRIPT_DIR} && /usr/bin/python3 update_playlists.py >> ${STORAGE_PATH}/logs/cron.log 2>&1"

(crontab -l 2>/dev/null | grep -v "fetch_podcasts.py\|update_playlists.py"; echo "$CRON_FETCH"; echo "$CRON_PLAYLISTS") | crontab -
echo "Installed cron jobs:"
echo "  $CRON_FETCH"
echo "  $CRON_PLAYLISTS"

echo ""
echo "=== Installation complete ==="
echo "Storage root: ${STORAGE_PATH}"
echo "Start with: systemctl start ${SERVICE_NAME}"
