#!/usr/bin/env bash
# Linux: abre Chrome/Chromium en pantalla completa (modo quiosco) con la pantalla de vinculacion de TurnoMatico.
# Es el equivalente de abrir-televisor.bat (Windows). Copialo al equipo que esta conectado al televisor o al totem.
#
#   chmod +x abrir-televisor.sh && ./abrir-televisor.sh
#
# Por defecto abre la aplicacion publicada (produccion). Para probar contra otro servidor:  URL="http://localhost:8105/#/vincular" ./abrir-televisor.sh
#
# Si el equipo no tiene Chrome ni Chromium, intenta instalar Chromium con apt, dnf, pacman, zypper o flatpak (necesita internet y clave de administrador).
#
# --kiosk-printing: el ticket del totem sale por la impresora predeterminada SIN cuadro de impresion. En Linux la predeterminada es la de
# CUPS:  lpstat -p  (ver impresoras)  y  lpoptions -d NOMBRE_DE_LA_IMPRESORA  (dejarla predeterminada).
# IMPORTANTE: si ya hay una ventana de Chrome abierta, la nueva la reutiliza e IGNORA estas opciones. Cierra Chrome antes
# (pkill chrome) o usa un perfil propio con PERFIL=/ruta/perfil ./abrir-televisor.sh (hay que vincular el equipo una vez en ese perfil).
# Para salir del modo quiosco: Alt + F4.
# Para que arranque solo al encender el equipo:  ./abrir-televisor.sh --autoinicio  (y activa el inicio de sesion automatico del usuario).

# ./abrir-televisor.sh --autoinicio  deja el totem/televisor abriendose solo al iniciar sesion (crea ~/.config/autostart/ejenova-turnomatico.desktop).
# ./abrir-televisor.sh --sin-autoinicio  lo quita.
if [ "$1" = "--autoinicio" ] || [ "$1" = "--sin-autoinicio" ]; then
  DESKTOP="$HOME/.config/autostart/ejenova-turnomatico.desktop"
  if [ "$1" = "--sin-autoinicio" ]; then
    rm -f "$DESKTOP" && echo "Arranque automatico quitado."
    exit 0
  fi
  mkdir -p "$HOME/.config/autostart"
  cat > "$DESKTOP" <<EOF
[Desktop Entry]
Type=Application
Name=Ejenova TurnoMatico
Exec=$(readlink -f "$0")
X-GNOME-Autostart-enabled=true
EOF
  echo "Listo: se abrira solo al iniciar sesion ($DESKTOP). Para que el equipo entre solo a la sesion, activa el inicio de sesion automatico del usuario."
  exit 0
fi

URL="${URL:-https://pantallas.ejenova.cl/#/vincular}"

buscar_navegador() {
  NAVEGADOR=""
  for candidato in google-chrome google-chrome-stable chromium chromium-browser; do
    if command -v "$candidato" >/dev/null 2>&1; then
      NAVEGADOR="$candidato"
      return 0
    fi
  done
  return 1
}

# Instala Chromium con el gestor de paquetes de la distribucion (pide la clave de administrador). Alternativa: bajar Google Chrome de google.com/chrome.
instalar_navegador() {
  local su=""
  [ "$(id -u)" -ne 0 ] && su="sudo"
  if command -v apt-get >/dev/null 2>&1; then
    $su apt-get update && { $su apt-get install -y chromium || $su apt-get install -y chromium-browser; }
  elif command -v dnf >/dev/null 2>&1; then
    $su dnf install -y chromium
  elif command -v pacman >/dev/null 2>&1; then
    $su pacman -S --noconfirm chromium
  elif command -v zypper >/dev/null 2>&1; then
    $su zypper --non-interactive install chromium
  elif command -v flatpak >/dev/null 2>&1; then
    flatpak install -y flathub org.chromium.Chromium
  else
    return 1
  fi
}

if ! buscar_navegador; then
  echo "Este equipo no tiene Google Chrome ni Chromium. Instalando Chromium..." >&2
  instalar_navegador
  if ! buscar_navegador; then
    echo "No se pudo instalar el navegador automaticamente. Instala Google Chrome (google.com/chrome) o Chromium y vuelve a ejecutar este archivo." >&2
    exit 1
  fi
fi

OPCIONES=(--kiosk --kiosk-printing --noerrdialogs --disable-infobars --no-first-run --no-default-browser-check)
if [ -n "$PERFIL" ]; then
  OPCIONES+=(--user-data-dir="$PERFIL")
fi

# Servicio local de impresion (impresora-local): imprime el ticket directo en la termica, sin driver ni cuadro de impresion.
# Si no esta, el navegador imprime como antes. Si ya esta corriendo, la segunda copia se cierra sola. setsid lo desliga de esta
# terminal: no se cierra al cerrarla.
AQUI="$(cd "$(dirname "$0")" && pwd)"
# Con el paquete .deb el servicio de impresion es un servicio de usuario de systemd (se levanta solo si se cae): se inicia por ahi.
if command -v systemctl >/dev/null 2>&1 && systemctl --user cat ejenova-impresora.service >/dev/null 2>&1; then
  systemctl --user start ejenova-impresora.service >/dev/null 2>&1
else
for candidato in "$AQUI/impresora-local/publicado-linux/EjenovaImpresora" "$AQUI/EjenovaImpresora"; do
  if [ -f "$candidato" ]; then
    chmod +x "$candidato" 2>/dev/null
    if ! pgrep -f EjenovaImpresora >/dev/null 2>&1; then
      (cd "$(dirname "$candidato")" && setsid nohup "$candidato" >/dev/null 2>&1 &)
    fi
    break
  fi
done
fi

exec "$NAVEGADOR" "${OPCIONES[@]}" "$URL"
