#!/bin/sh
set -u

source /lib/functions/mounts.sh
source /lib/functions/utils.sh

print_help() {
cat >&2 << EOF
Usage: language-pack MODE [OPTIONS]...

    reset [LANGUAGE]
        Performs a language reset, which removes all language files from
        the translations dir except english languages.
        If LANGUAGE is specified, then after reset installs the LANGUAGE pack
        into the translations dir.
        Returns zero on success, non-zero on failure.

Example:
language-pack reset standard

Navico language pack file manager.
EOF
}

lang_reset() {
    local lang="${1:-}"
    local trans_dir="$(get_key_value Translations "/home/nos/paths.ini" "/usr/share/NOS/translations")"
    local ret=0

    if [ -z "$trans_dir" ]; then
        return 1
    fi

    local trans_mnt="$(path_for_remount "$trans_dir" rw)"
    if [ -n "$trans_mnt" ]; then
        mount -o rw,remount "$trans_mnt"
    fi

    # Remove all language files from the translation directory except english
    find "$trans_dir" -maxdepth 1 -type f \( -name language_pack -o -name "*.qm" ! -name "*_en*" \) -delete

    if [ -n "$lang" ]; then
        # remove BurninClient due to space issues on some targets
        local burnin_bin=/usr/sbin/BurninClient
        if [ -r "$burnin_bin" ]; then
            local burnin_mnt="$(path_for_remount "$burnin_bin" rw 2>/dev/null)"
            if [ -n "$burnin_mnt" ]; then
                mount -o rw,remount "$burnin_mnt"
            fi

            rm -f "$burnin_bin"

            if [ -n "$burnin_mnt" ]; then
                mount -o ro,remount "$burnin_mnt"
            fi
        fi

        # install the new language pack
        local trans_file="/media/factorydata/translations/${lang}.tar.xz"
        if [ ! -r "$trans_file" ] || ! tar -C "$trans_dir" -xf "$trans_file"; then
            ret=1
            printf "unable to extract %s\n" "$trans_file" >&2
        fi
    fi

    sync
    if [ -n "$trans_mnt" ]; then
        mount -o ro,remount "$trans_mnt"
    fi
    return $ret
}

main() {
    case "${1:-}" in
    reset)
        shift
        lang_reset "$@"
        ;;
    --help)
        print_help
        ;;
    *)
        print_help
        exit 1
        ;;
    esac
}

main "$@"
