#!/usr/bin/env bash
# Pose dans Firefox Pure (firefox-pure de CachyOS, /usr/lib/firefox) la
# configuration AffûtOS (affutos.cfg) et le pack de langue du système.
# Appelé avec « --hook » par zz-affutos-firefox.hook (installation, mise à
# jour et retrait de firefox-pure) et par l'installation du paquet
# affutos-firefox, avec « --retirer » à son retrait ; sans option par
# affutos-firefox.service et par 15-systeme à l'installation d'AffûtOS.
#
# PAS DE RÉSEAU DANS LES CROCHETS : depuis pacman 7.1, crochets et scriptlets
# tournent dans un espace réseau neuf, sans autre interface que lo
# (DisableSandboxNetwork, pacman.conf(5)) — tout téléchargement y échoue en
# une milliseconde. Avec « --hook », le script pose donc la configuration puis
# confie le pack de langue à affutos-firefox.service, lancé après la
# transaction, hors de cet espace. Dans le chroot de l'installateur (pas de
# systemd), 15-systeme le rejoue.
#
# Pack de langue pris chez Mozilla, pas firefox-i18n-xx : celui d'Arch exige
# « firefox >= sa version », que firefox-pure suit avec retard ; la dépendance
# devient insatisfiable et bloque « pacman -Syu ». Un pack ne se charge que dans
# la même version majeure : on prend celui de la version exacte installée,
# contrôlé par SHA256SUMS. Posé dans la transaction qui change le navigateur,
# il est vu dès le premier lancement (Firefox ne relit le dossier qu'à un
# changement de version). Les deux préférences qui l'activent
# (intl.locale.requested "" et extensions.autoDisableScopes 11) viennent de
# cachyos-firefox-settings, installé avec le navigateur (netinstall.yaml).
#
# Code de sortie : 1 si le pack était attendu (firefox-pure présent, langue
# autre que en-US, pack publié) et n'a pas pu être posé, pour que 15-systeme
# et le service le disent. Avec « --hook », toujours 0 : la transaction est
# déjà validée, et pacman afficherait « error: command failed ».
set -u

d=/usr/lib/firefox
src=/usr/share/affutos/firefox
ext=$d/browser/extensions

if [ "${1:-}" = --retirer ] || ! v=$(pacman -Q firefox-pure 2>/dev/null); then
    # Retrait (de firefox-pure, ou d'affutos-firefox) : ces fichiers
    # n'appartiennent à aucun paquet, pacman les laisserait. Seulement les nôtres : un pack posé par un paquet (pacman -Qo)
    # reste. Pour passer à firefox + firefox-i18n-xx, retirer D'ABORD
    # firefox-pure : dans une seule transaction, pacman refuserait
    # firefox-i18n-xx, dont le fichier existe déjà sans appartenir à personne.
    for f in "$d/defaults/pref/autoconfig.js" "$d/affutos.cfg" \
             "$ext"/langpack-*@firefox.mozilla.org.xpi; do
        [ -e "$f" ] && ! pacman -Qqo "$f" >/dev/null 2>&1 && rm -f "$f"
    done
    rmdir -p "$ext" "$d/defaults/pref" 2>/dev/null
    exit 0
fi
# « firefox-pure 1:155.0.1-1 » → 155.0.1 : ni époque ni pkgrel dans l'URL.
v=${v#* }; v=${v#*:}; v=${v%-*}

if [ -f "$src/affutos.cfg" ]; then
    install -Dm644 "$src/autoconfig.js" "$d/defaults/pref/autoconfig.js"
    install -Dm644 "$src/affutos.cfg"   "$d/affutos.cfg"
fi
if [ "${1:-}" = --hook ]; then
    [ -d /run/systemd/system ] && systemctl --no-block start affutos-firefox.service
    exit 0
fi

# Langue du système (/etc/locale.conf, écrit par Calamares avant les paquets) :
# fr_FR → « fr-FR », puis « fr » — Mozilla nomme ses packs des deux façons
# (fr, de, pt-BR, es-ES…). Rien pour l'anglais américain, langue du navigateur.
loc=$(sed -n 's/^LANG=\([a-z]\{2,3\}\)_\([A-Z]\{2\}\).*/\1-\2/p' /etc/locale.conf 2>/dev/null)
[ -n "$loc" ] && [ "$loc" != en-US ] || exit 0
base=https://archive.mozilla.org/pub/firefox/releases/$v
if ! sommes=$(curl -fsS -m 30 --retry 2 "$base/SHA256SUMS"); then
    echo "AVERTISSEMENT : SHA256SUMS de Firefox $v injoignable, pack de langue non posé" >&2
    exit 1
fi
for l in "$loc" "${loc%-*}"; do
    s=$(awk -v f="linux-x86_64/xpi/$l.xpi" '$2 == f { print $1 }' <<<"$sommes")
    [ -n "$s" ] || continue
    tmp=$(mktemp)
    if curl -fsS -m 120 --retry 2 -o "$tmp" "$base/linux-x86_64/xpi/$l.xpi" \
            && echo "$s  $tmp" | sha256sum -c --status; then
        # Le nom du fichier est l'identifiant de l'extension : Firefox l'exige.
        install -Dm644 "$tmp" "$ext/langpack-$l@firefox.mozilla.org.xpi"
        echo "Firefox $v : pack de langue $l posé"
        rm -f "$tmp"
        exit 0
    fi
    # L'ancien pack, s'il existe, reste : une version corrective le garde
    # valable, une nouvelle majeure le désactive sans rien casser.
    echo "AVERTISSEMENT : pack de langue $l de Firefox $v non téléchargé" >&2
    rm -f "$tmp"
    exit 1
done
exit 0   # Mozilla ne publie aucun pack pour cette langue
