#!/usr/bin/env bash
# Linux: deja una impresora termica ESC/POS lista para el totem de TurnoMatico, SIN instalar ningun driver.
#
#   bash configurar-impresora-linux.sh            (la deja lista)
#   bash configurar-impresora-linux.sh --prueba   (ademas imprime un texto de prueba)
#
# Crea una cola "raw" de CUPS: los bytes que manda el servicio EjenovaImpresora (impresora-local) llegan tal cual a la impresora, asi que
# no hace falta el driver del fabricante (Epson no tiene uno para la TM-T88V). Sirve para cualquier termica ESC/POS conectada por USB.
# Variables opcionales:  NOMBRE=TERMICA (nombre de la cola)   URI=usb://... (si hay varias impresoras USB y quieres elegir una)

NOMBRE="${NOMBRE:-TERMICA}"
PRUEBA=0
[ "$1" = "--prueba" ] && PRUEBA=1

SU=""
[ "$(id -u)" -ne 0 ] && SU="sudo"

fallar() {
  echo "ERROR: $*" >&2
  exit 1
}

# 1. CUPS instalado y funcionando
if ! command -v lpadmin >/dev/null 2>&1; then
  echo "Instalando CUPS..."
  if command -v apt-get >/dev/null 2>&1; then
    $SU apt-get update && $SU apt-get install -y cups
  elif command -v dnf >/dev/null 2>&1; then
    $SU dnf install -y cups
  elif command -v pacman >/dev/null 2>&1; then
    $SU pacman -S --noconfirm cups
  elif command -v zypper >/dev/null 2>&1; then
    $SU zypper --non-interactive install cups
  else
    fallar "No se pudo instalar CUPS automaticamente. Instalalo y vuelve a ejecutar este archivo."
  fi
fi
command -v lpadmin >/dev/null 2>&1 || fallar "CUPS no quedo instalado."
$SU systemctl enable --now cups >/dev/null 2>&1 || $SU service cups start >/dev/null 2>&1

# 2. La impresora conectada por USB
if [ -z "$URI" ]; then
  echo "Buscando la impresora por USB..."
  LISTA="$($SU lpinfo -v 2>/dev/null | awk '{print $2}' | grep -i '^usb://')"
  # Se prefieren las marcas de termicas conocidas; si no, la primera impresora USB.
  URI="$(echo "$LISTA" | grep -iE 'epson|star|bixolon|citizen|pos|receipt|thermal|tm-' | head -n 1)"
  [ -n "$URI" ] || URI="$(echo "$LISTA" | head -n 1)"
fi
[ -n "$URI" ] || fallar "No aparece ninguna impresora USB. Revisa que este encendida y conectada (lsusb deberia mostrarla)."
echo "  Impresora: $URI"

# 3. Cola raw (sin driver)
$SU lpadmin -p "$NOMBRE" -E -v "$URI" -m raw || fallar "No se pudo crear la cola raw. Si CUPS ya no admite colas raw, usa el dispositivo USB directo: ver el README (Servicio:Nombre = /dev/usb/lp0)."
$SU cupsenable "$NOMBRE" 2>/dev/null
$SU cupsaccept "$NOMBRE" 2>/dev/null
echo "Cola '$NOMBRE' creada."

# 4. Predeterminada: es la que usa el servicio si no se le indica otra
$SU lpadmin -d "$NOMBRE" && echo "'$NOMBRE' es ahora la impresora predeterminada."

# 5. Prueba (opcional): texto simple en ESC/POS y corte parcial
if [ "$PRUEBA" -eq 1 ]; then
  echo "Imprimiendo prueba..."
  printf '\x1b@\x1ba\x01Prueba de impresion\nTurnoMatico\n\n\n\x1dV\x42\x03' | lp -d "$NOMBRE" -o raw
fi

echo
echo "Listo. Estado:"
lpstat -p "$NOMBRE" -d
echo "Ahora abre el totem con ./abrir-televisor.sh (inicia el servicio de impresion si esta junto a este archivo)."
