#!/bin/bash

# flatpak-config.sh
# Charlie Martinez® <cmartinez@quirinux.org>
# GPLv3

# =========================================================================================
# ROOT
# =========================================================================================
ICONO="/usr/share/icons/flatpakconfig.png"
NOMBRE_ICONO="flatpakconfig"

_require_root() {
    if [ "$EUID" -ne 0 ]; then
        zenity --error --window-icon="$ICONO" --icon-name="$NOMBRE_ICONO" --text="$TXT_ROOT"
        exit 1
    fi
}

# =========================================================================================
# IDIOMAS
# =========================================================================================
_set_lang() {
case "${LANG%%_*}" in
es)
TXT_ROOT="Este script debe ejecutarse como root."
TXT_TITULO="¿Para qué sirve Flatpak?"
TXT_EXPLICACION="Flatpak amplía los paquetes disponibles en el Centro de Software,
y es la forma más práctica de contar con las versiones
más modernas de cada programa, como alternativa a las estables."
TXT_FP_ON="Flatpak está activado. ¿Desea desactivarlo?"
TXT_FP_OFF="Flatpak no está activado. ¿Desea activarlo?"
TXT_NEED_NET="Se requiere conexión a Internet para continuar."
TXT_CONFIRM="Confirmación requerida"
TXT_APPS_REMOVED="Las siguientes aplicaciones Flatpak serán eliminadas:"
TXT_CONTINUE="¿Desea continuar?"
TXT_NO_APPS="No hay aplicaciones Flatpak instaladas."
TXT_ACTIVATING="Configurando Flatpak"
TXT_DEACTIVATING="Desactivando Flatpak"
TXT_WAIT="Espere..."
TXT_FIN="Configuración finalizada."
;;
de)
TXT_ROOT="Dieses Skript muss als Root ausgeführt werden."
TXT_TITULO="Wofür dient Flatpak?"
TXT_EXPLICACION="Flatpak erweitert die im Software-Center verfügbaren Pakete
und ist die praktischste Möglichkeit, um stets die neuesten
Versionen jedes Programms zu erhalten, als Alternative zu den stabilen."
TXT_FP_ON="Flatpak ist aktiviert. Möchten Sie es deaktivieren?"
TXT_FP_OFF="Flatpak ist nicht aktiviert. Möchten Sie es aktivieren?"
TXT_NEED_NET="Eine Internetverbindung ist erforderlich."
TXT_CONFIRM="Bestätigung erforderlich"
TXT_APPS_REMOVED="Die folgenden Flatpak-Anwendungen werden entfernt:"
TXT_CONTINUE="Möchten Sie fortfahren?"
TXT_NO_APPS="Keine Flatpak-Anwendungen installiert."
TXT_ACTIVATING="Flatpak wird konfiguriert"
TXT_DEACTIVATING="Flatpak wird deaktiviert"
TXT_WAIT="Bitte warten..."
TXT_FIN="Konfiguration abgeschlossen."
;;
it)
TXT_ROOT="Questo script deve essere eseguito come root."
TXT_TITULO="A cosa serve Flatpak?"
TXT_EXPLICACION="Flatpak amplia i pacchetti disponibili nel Centro Software
ed è il modo più pratico per avere le versioni più recenti
di ogni programma, come alternativa a quelle stabili."
TXT_FP_ON="Flatpak è attivo. Vuoi disattivarlo?"
TXT_FP_OFF="Flatpak non è attivo. Vuoi attivarlo?"
TXT_NEED_NET="È necessaria una connessione a Internet."
TXT_CONFIRM="Conferma richiesta"
TXT_APPS_REMOVED="Le seguenti applicazioni Flatpak verranno rimosse:"
TXT_CONTINUE="Vuoi continuare?"
TXT_NO_APPS="Nessuna applicazione Flatpak installata."
TXT_ACTIVATING="Configurazione di Flatpak"
TXT_DEACTIVATING="Disattivazione di Flatpak"
TXT_WAIT="Attendere..."
TXT_FIN="Configurazione completata."
;;
fr)
TXT_ROOT="Ce script doit être exécuté en tant que root."
TXT_TITULO="À quoi sert Flatpak ?"
TXT_EXPLICACION="Flatpak élargit les paquets disponibles dans le Centre logiciel
et constitue le moyen le plus pratique de disposer des versions
les plus récentes de chaque programme, en alternative aux versions stables."
TXT_FP_ON="Flatpak est activé. Voulez-vous le désactiver ?"
TXT_FP_OFF="Flatpak n'est pas activé. Voulez-vous l'activer ?"
TXT_NEED_NET="Une connexion Internet est requise."
TXT_CONFIRM="Confirmation requise"
TXT_APPS_REMOVED="Les applications Flatpak suivantes seront supprimées :"
TXT_CONTINUE="Voulez-vous continuer ?"
TXT_NO_APPS="Aucune application Flatpak installée."
TXT_ACTIVATING="Configuration de Flatpak"
TXT_DEACTIVATING="Désactivation de Flatpak"
TXT_WAIT="Veuillez patienter..."
TXT_FIN="Configuration terminée."
;;
ru)
TXT_ROOT="Этот скрипт должен быть запущен от имени root."
TXT_TITULO="Для чего нужен Flatpak?"
TXT_EXPLICACION="Flatpak расширяет набор пакетов, доступных в Центре приложений,
и является самым практичным способом получить самые свежие
версии каждой программы как альтернативу стабильным."
TXT_FP_ON="Flatpak активирован. Отключить его?"
TXT_FP_OFF="Flatpak не активирован. Включить его?"
TXT_NEED_NET="Требуется подключение к Интернету."
TXT_CONFIRM="Требуется подтверждение"
TXT_APPS_REMOVED="Следующие приложения Flatpak будут удалены:"
TXT_CONTINUE="Продолжить?"
TXT_NO_APPS="Приложения Flatpak не установлены."
TXT_ACTIVATING="Настройка Flatpak"
TXT_DEACTIVATING="Отключение Flatpak"
TXT_WAIT="Пожалуйста, подождите..."
TXT_FIN="Настройка завершена."
;;
hu)
TXT_ROOT="Ezt a szkriptet root felhasználóként kell futtatni."
TXT_TITULO="Mire való a Flatpak?"
TXT_EXPLICACION="A Flatpak bővíti a Szoftverközpontban elérhető csomagokat,
és ez a legpraktikusabb módja annak, hogy mindig az egyes
programok legújabb verzióival rendelkezzen, a stabil verziók alternatívájaként."
TXT_FP_ON="A Flatpak engedélyezve van. Szeretné letiltani?"
TXT_FP_OFF="A Flatpak nincs engedélyezve. Szeretné engedélyezni?"
TXT_NEED_NET="Internetkapcsolat szükséges."
TXT_CONFIRM="Megerősítés szükséges"
TXT_APPS_REMOVED="A következő Flatpak alkalmazások eltávolításra kerülnek:"
TXT_CONTINUE="Folytatja?"
TXT_NO_APPS="Nincsenek Flatpak alkalmazások telepítve."
TXT_ACTIVATING="Flatpak beállítása"
TXT_DEACTIVATING="Flatpak letiltása"
TXT_WAIT="Kérem várjon..."
TXT_FIN="A beállítások elkészültek."
;;
gl)
TXT_ROOT="Este script debe executarse como root."
TXT_TITULO="Para que serve Flatpak?"
TXT_EXPLICACION="Flatpak amplía os paquetes dispoñibles no Centro de Software,
e é a forma máis práctica de contar coas versións
máis modernas de cada programa, como alternativa ás estables."
TXT_FP_ON="Flatpak está activado. Desexa desactivalo?"
TXT_FP_OFF="Flatpak non está activado. Desexa activalo?"
TXT_NEED_NET="É necesaria conexión a Internet."
TXT_CONFIRM="Confirmación necesaria"
TXT_APPS_REMOVED="As seguintes aplicacións Flatpak serán eliminadas:"
TXT_CONTINUE="Desexa continuar?"
TXT_NO_APPS="Non hai aplicacións Flatpak instaladas."
TXT_ACTIVATING="Configurando Flatpak"
TXT_DEACTIVATING="Desactivando Flatpak"
TXT_WAIT="Agarde..."
TXT_FIN="Configuración finalizada."
;;
pt)
TXT_ROOT="Este script deve ser executado como root."
TXT_TITULO="Para que serve o Flatpak?"
TXT_EXPLICACION="O Flatpak amplia os pacotes disponíveis na Central de Programas,
e é a forma mais prática de ter as versões mais modernas
de cada programa, como alternativa às estáveis."
TXT_FP_ON="Flatpak está ativado. Deseja desativá-lo?"
TXT_FP_OFF="Flatpak não está ativado. Deseja ativá-lo?"
TXT_NEED_NET="É necessária conexão com a Internet."
TXT_CONFIRM="Confirmação necessária"
TXT_APPS_REMOVED="Os seguintes aplicativos Flatpak serão removidos:"
TXT_CONTINUE="Deseja continuar?"
TXT_NO_APPS="Nenhum aplicativo Flatpak instalado."
TXT_ACTIVATING="Configurando Flatpak"
TXT_DEACTIVATING="Desativando Flatpak"
TXT_WAIT="Aguarde..."
TXT_FIN="Configuração concluída."
;;
en)
TXT_ROOT="This script must be run as root."
TXT_TITULO="What is Flatpak for?"
TXT_EXPLICACION="Flatpak expands the packages available in the Software Center,
and it is the most practical way to get the most modern
versions of each program, as an alternative to the stable ones."
TXT_FP_ON="Flatpak is enabled. Do you want to disable it?"
TXT_FP_OFF="Flatpak is not enabled. Do you want to enable it?"
TXT_NEED_NET="An Internet connection is required to continue."
TXT_CONFIRM="Confirmation required"
TXT_APPS_REMOVED="The following Flatpak applications will be removed:"
TXT_CONTINUE="Do you want to continue?"
TXT_NO_APPS="No Flatpak applications installed."
TXT_ACTIVATING="Setting up Flatpak"
TXT_DEACTIVATING="Disabling Flatpak"
TXT_WAIT="Please wait..."
TXT_FIN="Setup finished."
;;
*) _set_lang en ;;
esac
}

# =========================================================================================
# UTILIDADES
# =========================================================================================
_has_net() { ping -c1 1.1.1.1 >/dev/null 2>&1; }

# =========================================================================================
# ACTIVAR
# =========================================================================================

_activar() {
(
echo 20; apt-get update -y
echo 60; apt-get install -y flatpak gir1.2-flatpak-1.0
echo 80; flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
echo 90; flatpak update -y
echo 100
) | zenity --progress --title="$TXT_ACTIVATING" --window-icon="$ICONO" --icon-name="$NOMBRE_ICONO" --text="$TXT_WAIT" --auto-close
}

# =========================================================================================
# DESACTIVAR
# =========================================================================================
_desactivar() {
APPS=$(flatpak list --columns=application 2>/dev/null)

if [ -n "$APPS" ]; then
    zenity --question --title="$TXT_CONFIRM" --window-icon="$ICONO" --icon-name="$NOMBRE_ICONO" \
        --text="$TXT_APPS_REMOVED\n\n$APPS\n\n$TXT_CONTINUE" || return
fi

(
echo 40; apt-get remove --purge -y flatpak gir1.2-flatpak-1.0 gnome-software-plugin-flatpak
echo 80; apt-get autoremove --purge -y
echo 100; rm -rf /var/lib/flatpak
) | zenity --progress --title="$TXT_DEACTIVATING" --window-icon="$ICONO" --icon-name="$NOMBRE_ICONO" --text="$TXT_WAIT" --auto-close
}

# =========================================================================================
# FLUJO PRINCIPAL
# =========================================================================================
_main() {

if command -v flatpak >/dev/null; then
    zenity --question --window-icon="$ICONO" --icon-name="$NOMBRE_ICONO" --text="<b>$TXT_TITULO</b>

$TXT_EXPLICACION

$TXT_FP_ON" || exit 0
    _desactivar
else
    while true; do
        zenity --question --window-icon="$ICONO" --icon-name="$NOMBRE_ICONO" --text="<b>$TXT_TITULO</b>

$TXT_EXPLICACION

$TXT_FP_OFF" || exit 0
        _has_net && break
        zenity --question --window-icon="$ICONO" --icon-name="$NOMBRE_ICONO" --text="$TXT_NEED_NET" || exit 0
    done
    _activar
fi

zenity --info --window-icon="$ICONO" --icon-name="$NOMBRE_ICONO" --text="$TXT_FIN"
}

# =========================================================================================
_set_lang
_require_root
_main
