#!/bin/bash
# ============================================================================
#  instalar-astra.sh — Astra Platinum Pro
#  Elimina CUALQUIER versión previa de Astra del sistema (sin dejar rastro)
#  e instala ÚNICAMENTE la versión Platinum Pro incluida junto a este script.
#
#  Uso:      sudo ./instalar-astra.sh [opciones]
#  Opciones:
#    --puerto N | --port N    Puerto del panel web (por defecto: 8000)
#    --config RUTA            Usar un archivo de configuración JSON concreto
#    --sin-arrancar           Instala pero no inicia el servicio
#    --sin-habilitar          No habilita el arranque automático con el sistema
#  ============================================================================
set -e

PUERTO=8000
ARRANCAR=1
HABILITAR=1
CONFIG_NUEVA=""

uso() { sed -n '2,14p' "$0"; exit 0; }

while [[ $# -gt 0 ]]; do
  case "$1" in
    --puerto|--port)      PUERTO="$2"; shift 2 ;;
    --config)             CONFIG_NUEVA="$2"; shift 2 ;;
    --sin-arrancar)       ARRANCAR=0; shift ;;
    --sin-habilitar)      HABILITAR=0; shift ;;
    -h|--help|uso)        uso ;;
    *) echo "[!] Opción desconocida: $1 (ver --help)"; exit 1 ;;
  esac
done

if [ "$(id -u)" != "0" ]; then
    echo "[!] Este instalador necesita root.  Ejecuta:  sudo ./instalar-astra.sh"
    exit 1
fi

DIR="$(cd "$(dirname "$0")" && pwd)"
if [ ! -f "$DIR/astra" ]; then
    echo "[!] No se encontró el binario 'astra' junto a este script."; exit 1
fi

echo "============================================================"
echo " Astra Platinum Pro — Instalador"
echo "============================================================"
echo " [1/7] Purga total: deteniendo y eliminando cualquier Astra"
echo "============================================================"
systemctl stop   astra.service        2>/dev/null || true
systemctl stop   astra-streams.service 2>/dev/null || true
systemctl disable astra.service       2>/dev/null || true
systemctl disable astra-streams.service 2>/dev/null || true
pkill -x astra 2>/dev/null || true
sleep 1
rm -f  /etc/systemd/system/astra.service
rm -f  /etc/systemd/system/astra-streams.service
rm -f  /etc/systemd/system/multi-user.target.wants/astra*.service
rm -f  /usr/bin/astra /usr/local/bin/astra
if [ -f /etc/astra/astra.conf ]; then
    cp /etc/astra/astra.conf /root/astra-config-previa.respaldada
    echo "   -> Configuración previa respaldada en /root/astra-config-previa.respaldada"
fi
rm -rf /etc/astra
rm -f  /var/log/astra.log /run/astra.pid
rm -f  /var/crash/_usr_bin_astra.*.crash 2>/dev/null || true
systemctl daemon-reload 2>/dev/null || true
echo "   -> Sistema limpio: sin rastros de otras versiones."

echo "============================================================"
echo " [2/7] Instalando Astra Platinum Pro"
echo "============================================================"
install -m 755 "$DIR/astra" /usr/bin/astra
echo "   -> $(/usr/bin/astra --version 2>&1 | head -1)"

echo "============================================================"
echo " [3/7] Creando /etc/astra/"
echo "============================================================"
mkdir -p /etc/astra
if [ -n "$CONFIG_NUEVA" ] && [ -f "$CONFIG_NUEVA" ]; then
    install -m 644 "$CONFIG_NUEVA" /etc/astra/astra.conf
    echo "   -> Configuración indicada: $CONFIG_NUEVA"
else
    cat > /etc/astra/astra.conf <<'CONF'
{
  "log": {"stdout": true, "level": "info"}
}
CONF
    echo "   -> Configuración por defecto instalada (edítala en /etc/astra/astra.conf)"
fi

echo "============================================================"
echo " [4/7] Bloqueo de servidores de licencia externos"
echo "============================================================"
if ! grep -q "Astra luiscera" /etc/hosts 2>/dev/null; then
    {
        echo ""
        echo "# Astra luiscera: bloqueo de servidores de licencia externos"
        echo "127.0.0.1 ls1.cesbo.com ls2.cesbo.com ls3.cesbo.com astra.cesbo.com"
    } >> /etc/hosts
    echo "   -> Servidores de licencia Cesbo redirigidos a 127.0.0.1"
    echo "   -> help.cesbo.com NO bloqueado (botón Help funcional)"
else
    echo "   -> Bloqueo ya presente en /etc/hosts"
    # Asegurar que help.cesbo.com no esté bloqueado
    if grep -q "help.cesbo.com" /etc/hosts 2>/dev/null; then
        sed -i 's/ help\.cesbo\.com//g; s/help\.cesbo\.com //g' /etc/hosts
        echo "   -> help.cesbo.com desbloqueado (botón Help funcional)"
    fi
fi

echo "============================================================"
echo " [5/7] Registrando servicio systemd (panel en puerto $PUERTO)"
echo "============================================================"
cat > /etc/systemd/system/astra.service <<EOF
[Unit]
Description=Astra Media Server (Platinum Pro)
After=network.target

[Service]
Type=simple
ExecStartPre=/bin/sleep 8
ExecStart=/usr/bin/astra -c /etc/astra/astra.conf -p $PUERTO
Restart=always
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
echo "   -> Unidad /etc/systemd/system/astra.service creada"

if [ "$HABILITAR" = "1" ]; then
    echo "============================================================"
    echo " [6/7] Habilitando arranque automático con el sistema"
    echo "============================================================"
    systemctl enable astra.service
else
    echo "== [6/7] Arranque automático omitido (--sin-habilitar) =="
fi

if [ "$ARRANCAR" = "1" ]; then
    echo "============================================================"
    echo " [7/7] Iniciando servicio"
    echo "============================================================"
    systemctl restart astra.service
    sleep 2
    systemctl --no-pager --lines=3 status astra.service || true
    IP=$(hostname -I 2>/dev/null | awk '{print $1}')
    echo
    echo "============================================================"
    echo "  INSTALACIÓN COMPLETADA — Astra Platinum Pro"
    echo "  Panel web : http://${IP:-127.0.0.1}:${PUERTO}"
    echo "  Acceso    : admin / admin   (cámbialo en el panel)"
    echo "  Licencia  : Platinum Pro (Lifetime)"
    if [ "$HABILITAR" = "1" ]; then
        echo "  Arranque automático: ACTIVADO"
    else
        echo "  Arranque automático: DESACTIVADO (--sin-habilitar)"
    fi
    echo "============================================================"
    echo
    echo "  CARACTERÍSTICAS:"
    echo "    - Licencia Platinum Pro de por vida (sin expiración)"
    echo "    - Botón ON/OFF por IP (verde=activa, rojo=desactivada)"
    echo "    - Comentarios asociados a cada IP (flecha ↳)"
    echo "    - Botón +/- para mostrar/quitar comentario"
    echo "    - Botón Help de Cesbo habilitado"
    echo "============================================================"
else
    echo "== [7/7] Servicio instalado pero sin arrancar (--sin-arrancar) =="
fi

echo
echo "Comandos útiles:"
echo "  systemctl status astra      # estado del servicio"
echo "  journalctl -u astra -f      # logs en vivo"
echo "  systemctl restart astra     # reiniciar (tras editar la configuración)"
echo "  systemctl enable astra      # activar arranque automático"
echo "  systemctl disable astra     # desactivar arranque automático"
echo "  /usr/bin/astra --version    # versión instalada"
