#!/bin/bash

# ======================================================================
# Archivo:       bluconfig
# Ruta:          /usr/local/bin/
# Autor:         Charlie Martínez® <cmartinez@quirinux.org>
# Licencia:      https://www.gnu.org/licenses/gpl-2.0.txt
# Propósito:     Activar o desactivar el soporte para bluetooth
# Distribución:  Quirinux 2.x
# ======================================================================

#
# Copyright (c) 2019-2025 Charlie Martínez, derechos reservados.
# Licencia: https://www.gnu.org/licenses/gpl-2.0.txt
# Usos autorizados y no autorizados de la marca Quirinux:
# Ver https://www.quirinux.org/aviso-legal
#

# =========================================================================================
# MENSAJES MULTI-IDIOMA Y CONFIGURACIONES
# =========================================================================================

function mostrar_mensaje() {
    local clave=$1
    declare -A mensajes=(
        [es_bluetooth_on]="Bluetooth está activado. ¿Desea desactivarlo?"
        [es_bluetooth_off]="Bluetooth está desactivado. ¿Desea activarlo?"
        [es_no_bluetooth]="No se detectó hardware Bluetooth en este equipo. Si cree que su equipo tiene Bluetooth, compruebe si no está deshabilitado desde la BIOS."
        [es_no_internet]="No se detectó conexión a Internet. Por favor, conecta a Internet antes de continuar."
        [es_no_permisos]="Debe ejecutar este script con permisos de superusuario."
        [es_paquetes_instalados]="Los paquetes necesarios ya están instalados."
        [es_instalando_paquetes]="Instalando paquetes necesarios..."
        [es_bluetooth_activada]="Bluetooth activado"
        [es_bluetooth_desactivada]="Bluetooth desactivado"

        [en_bluetooth_on]="Bluetooth is enabled. Do you want to disable it?"
        [en_bluetooth_off]="Bluetooth is disabled. Do you want to enable it?"
        [en_no_bluetooth]="No Bluetooth hardware detected on this machine. If you believe your device has Bluetooth, check whether it is disabled in the BIOS."
        [en_no_internet]="No Internet connection detected. Please connect to the Internet before proceeding."
        [en_no_permisos]="You must run this script as a superuser."
        [en_paquetes_instalados]="Required packages are already installed."
        [en_instalando_paquetes]="Installing required packages..."
        [en_bluetooth_activada]="Bluetooth enabled"
        [en_bluetooth_desactivada]="Bluetooth disabled"

        [gl_bluetooth_on]="Bluetooth está activado. Desexa desactivalo?"
        [gl_bluetooth_off]="Bluetooth está desactivado. Desexa activalo?"
        [gl_no_bluetooth]="Non se detectou hardware Bluetooth neste equipo. Se cre que o seu equipo ten Bluetooth, comprobe se non está desactivado dende a BIOS."
        [gl_no_internet]="Non se detectou conexión a Internet. Conéctate a Internet antes de continuar."
        [gl_no_permisos]="Debe executar este script como superusuario."
        [gl_paquetes_instalados]="Os paquetes necesarios xa están instalados."
        [gl_instalando_paquetes]="Instalando os paquetes necesarios..."
        [gl_bluetooth_activada]="Bluetooth activado"
        [gl_bluetooth_desactivada]="Bluetooth desactivado"

        [de_bluetooth_on]="Bluetooth ist aktiviert. Möchten Sie es deaktivieren?"
        [de_bluetooth_off]="Bluetooth ist deaktiviert. Möchten Sie es aktivieren?"
        [de_no_bluetooth]="Keine Bluetooth-Hardware auf diesem Computer erkannt. Wenn Sie glauben, dass Ihr Gerät Bluetooth hat, prüfen Sie, ob es im BIOS deaktiviert ist."
        [de_no_internet]="Keine Internetverbindung erkannt. Bitte verbinden Sie sich mit dem Internet, bevor Sie fortfahren."
        [de_no_permisos]="Dieses Skript muss mit Superuser-Rechten ausgeführt werden."
        [de_paquetes_instalados]="Die benötigten Pakete sind bereits installiert."
        [de_instalando_paquetes]="Benötigte Pakete werden installiert..."
        [de_bluetooth_activada]="Bluetooth aktiviert"
        [de_bluetooth_desactivada]="Bluetooth deaktiviert"

        [it_bluetooth_on]="Bluetooth è attivo. Vuoi disattivarlo?"
        [it_bluetooth_off]="Bluetooth è disattivo. Vuoi attivarlo?"
        [it_no_bluetooth]="Nessun hardware Bluetooth rilevato su questo computer. Se ritieni che il tuo dispositivo abbia il Bluetooth, verifica se è disabilitato nel BIOS."
        [it_no_internet]="Nessuna connessione Internet rilevata. Si prega di connettersi a Internet prima di procedere."
        [it_no_permisos]="Devi eseguire questo script come superutente."
        [it_paquetes_instalados]="I pacchetti richiesti sono già installati."
        [it_instalando_paquetes]="Installazione dei pacchetti richiesti..."
        [it_bluetooth_activada]="Bluetooth attivato"
        [it_bluetooth_desactivada]="Bluetooth disattivato"

        [fr_bluetooth_on]="Bluetooth est activé. Voulez-vous le désactiver ?"
        [fr_bluetooth_off]="Bluetooth est désactivé. Voulez-vous l'activer ?"
        [fr_no_bluetooth]="Aucun matériel Bluetooth détecté sur cet ordinateur. Si vous pensez que votre appareil dispose du Bluetooth, vérifiez s'il est désactivé dans le BIOS."
        [fr_no_internet]="Aucune connexion Internet détectée. Veuillez vous connecter à Internet avant de continuer."
        [fr_no_permisos]="Vous devez exécuter ce script en tant que superutilisateur."
        [fr_paquetes_instalados]="Les paquets nécessaires sont déjà installés."
        [fr_instalando_paquetes]="Installation des paquets nécessaires..."
        [fr_bluetooth_activada]="Bluetooth activé"
        [fr_bluetooth_desactivada]="Bluetooth désactivé"

        [pt_bluetooth_on]="Bluetooth está ativado. Deseja desativá-lo?"
        [pt_bluetooth_off]="Bluetooth está desativado. Deseja ativá-lo?"
        [pt_no_bluetooth]="Nenhum hardware Bluetooth detectado nesta máquina. Se acredita que o seu dispositivo tem Bluetooth, verifique se ele não está desabilitado na BIOS."
        [pt_no_internet]="Nenhuma conexão com a Internet detectada. Por favor, conecte-se à Internet antes de prosseguir."
        [pt_no_permisos]="Você deve executar este script como superusuário."
        [pt_paquetes_instalados]="Os pacotes necessários já estão instalados."
        [pt_instalando_paquetes]="Instalando os pacotes necessários..."
        [pt_bluetooth_activada]="Bluetooth ativado"
        [pt_bluetooth_desactivada]="Bluetooth desativado"

        [hu_bluetooth_on]="A Bluetooth be van kapcsolva. Szeretné kikapcsolni?"
        [hu_bluetooth_off]="A Bluetooth ki van kapcsolva. Szeretné bekapcsolni?"
        [hu_no_bluetooth]="Nem észlelhető Bluetooth-hardver ezen a gépen. Ha úgy gondolja, hogy az eszköze rendelkezik Bluetooth-szal, ellenőrizze, hogy nem lett-e letiltva a BIOS-ban."
        [hu_no_internet]="Nem észlelhető internetkapcsolat. Kérjük, csatlakozzon az internethez, mielőtt folytatja."
        [hu_no_permisos]="Ezt a szkriptet rendszergazdaként kell futtatni."
        [hu_paquetes_instalados]="A szükséges csomagok már telepítve vannak."
        [hu_instalando_paquetes]="A szükséges csomagok telepítése..."
        [hu_bluetooth_activada]="Bluetooth bekapcsolva"
        [hu_bluetooth_desactivada]="Bluetooth kikapcsolva"
    )

    local idioma=$(echo $LANG | cut -d_ -f1)
    local mensaje=${mensajes[${idioma}_$clave]:-${mensajes[en_$clave]}}
    echo "$mensaje"
}

# =========================================================================================
# FUNCIONES PARA GESTIÓN DE BLUETOOTH
# =========================================================================================

function verificar_paquetes() {
    for paquete in blueman bluez bluetooth bluez-cups bluez-firmware bluez-obexd libbluetooth-dev; do
        dpkg -s $paquete &> /dev/null
        if [[ $? -ne 0 ]]; then
            return 1
        fi
    done
    return 0
}

function instalar_paquetes() {
    if ! verificar_paquetes; then
        if ! ping -c 1 google.com &> /dev/null; then
            zenity --warning --text="$(mostrar_mensaje no_internet)"
            exit 1
        fi
        zenity --info --text="$(mostrar_mensaje instalando_paquetes)"
        sudo apt-get update
        for paquete in blueman bluez bluetooth bluez-cups bluez-firmware bluez-obexd libbluetooth-dev; do
            sudo apt-get install -y $paquete
        done
    else
        zenity --info --text="$(mostrar_mensaje paquetes_instalados)"
    fi

    # Reaplicar el ajuste de compatibilidad (ControllerMode = bredr) por si
    # la reinstalación de bluez trajo de vuelta su main.conf de fábrica.
    if [ -f /etc/bluetooth/main.conf ] && [ -f /usr/share/quirinux-bluconfig/main.conf ]; then
        if ! grep -q "^ControllerMode = bredr" /etc/bluetooth/main.conf; then
            sudo cp -f /usr/share/quirinux-bluconfig/main.conf /etc/bluetooth/main.conf
        fi
    fi
}

function habilitar_bluetooth() {
    instalar_paquetes
    sudo sed -i 's/^Hidden=true/Hidden=false/' /etc/xdg/autostart/blueman.desktop
    blueman-applet &
    zenity --info --text="$(mostrar_mensaje bluetooth_activada)"
}

function deshabilitar_bluetooth() {
    sudo sed -i 's/^Hidden=false/Hidden=true/' /etc/xdg/autostart/blueman.desktop
    pkill blueman-applet
    zenity --info --text="$(mostrar_mensaje bluetooth_desactivada)"
}

# =========================================================================================
# EJECUCIÓN DEL SCRIPT
# =========================================================================================

if [[ $EUID -ne 0 ]]; then
    zenity --error --text="$(mostrar_mensaje no_permisos)"
    exit 1
fi

# Detectar hardware y estado de Bluetooth
BT_INFO=$(rfkill list bluetooth 2>/dev/null)
if [[ -z "$BT_INFO" ]]; then
    zenity --error --text="$(mostrar_mensaje no_bluetooth)"
    exit 1
fi

if echo "$BT_INFO" | grep -qi "Soft blocked: yes"; then
    # Bluetooth desactivado
    zenity --question --text="$(mostrar_mensaje bluetooth_off)" || exit 0
    habilitar_bluetooth
else
    # Bluetooth activado
    zenity --question --text="$(mostrar_mensaje bluetooth_on)" || exit 0
    deshabilitar_bluetooth
fi
