#!/bin/sh
# Configura Veyon en el puesto cliente: idioma, autenticacion por clave de fichero,
# importacion de la clave publica, puerto de escucha y arranque automatico del servicio.
# Se ejecuta desde el postinst y puede relanzarse manualmente en cualquier momento.
set -e

CONF_FILE=/etc/vx-dga-l-veyon-client/vx-dga-l-veyon-client.conf
DATA_DIR=/usr/share/vx-dga-l-veyon-client

# --- Valores por defecto (sobreescribibles desde $CONF_FILE) ---
VEYON_LANGUAGE=es_ES

# Nombre interno de la clave en el almacen de Veyon (debe coincidir con el del maestro)
VEYON_AUTH_KEY_NAME=teacher

# Grupo del sistema con acceso de lectura a la clave publica.
# El grupo debe existir antes de ejecutar este script.
VEYON_AUTH_PUBLIC_GROUP=profesores

# Ruta al fichero PEM de la clave publica instalado por el paquete.
# Cambia esta variable en $CONF_FILE para usar una clave propia.
VEYON_PUBLIC_KEY=$DATA_DIR/llaves-genericas_public_key.pem

# Puerto TCP en el que escucha el servicio Veyon Server en este equipo
VEYON_SERVER_PORT=11100

# Arrancar el servicio Veyon Server automaticamente al iniciar el sistema
VEYON_SERVICE_AUTOSTART=true

# Cargar configuracion local si existe (sobreescribe los valores por defecto)
if [ -f "$CONF_FILE" ]; then
    # shellcheck disable=SC1090
    . "$CONF_FILE"
fi

# Cargar fragmentos adicionales desde conf.d/ en orden alfabetico.
# Permiten que otros paquetes o el administrador sobreescriban variables concretas
# sin modificar el fichero de configuracion principal.
CONF_D=/etc/vx-dga-l-veyon-client/conf.d
if [ -d "$CONF_D" ]; then
    for _snippet in "$CONF_D"/*.conf; do
        # El test -f descarta la expansion literal cuando no hay ficheros .conf
        # shellcheck disable=SC1090
        [ -f "$_snippet" ] && . "$_snippet"
    done
    unset _snippet
fi

# Veyon puede no estar disponible en entornos de build; se omite sin error fatal
if ! command -v veyon-cli >/dev/null 2>&1; then
    echo "[vx-dga-l-veyon-client] Aviso: veyon-cli no esta disponible, se omite la configuracion."
    exit 0
fi

# Establecer el idioma de la interfaz
veyon-cli config set UI/Language "$VEYON_LANGUAGE"

# Activar autenticacion por clave de fichero.
# El cliente solo necesita la clave publica para verificar que el maestro es legitimo.
veyon-cli config set Authentication/Method "Key file authentication"

# Puerto de escucha del servidor Veyon en este cliente
veyon-cli config set Network/VeyonServerPort "$VEYON_SERVER_PORT"

# Arranque automatico del servicio con el sistema
veyon-cli config set Service/Autostart "$VEYON_SERVICE_AUTOSTART"

# Importar la clave publica: permite que los maestros que posean la clave privada
# correspondiente puedan conectarse a este equipo.
if [ -f "$VEYON_PUBLIC_KEY" ]; then
    veyon-cli authkeys import "${VEYON_AUTH_KEY_NAME}/public" "$VEYON_PUBLIC_KEY" || true
    veyon-cli authkeys setaccessgroup "${VEYON_AUTH_KEY_NAME}/public" "$VEYON_AUTH_PUBLIC_GROUP" || true
else
    echo "[vx-dga-l-veyon-client] Aviso: llave publica no encontrada: $VEYON_PUBLIC_KEY"
fi

# Actualizar el formato interno de configuracion si Veyon fue actualizado desde la
# ultima ejecucion de este script
veyon-cli config upgrade

# Registrar el servicio en el sistema si aun no lo esta y arrancarlo
veyon-cli service register || true
veyon-cli service start || veyon-cli service restart || true

exit 0
