#!/bin/bash

TEXTDOMAIN=astra-version
export TEXTDOMAIN
TEXTDOMAINDIR=/usr/share/locale
export TEXTDOMAINDIR

print_file_content() {
    local FILE="$1"
    local DESCRIPTION="$2"
    local PRINT_DESCRIPTION="$3"
    [ -f "$FILE" ] || return 1

    [ "$PRINT_DESCRIPTION" == "true" ] && echo -e "\033[1m$(gettext "$DESCRIPTION"):\033[0m"

    case "$FILE" in
    "/etc/astra_license")
        local mode=$(grep 'MODE=' "$FILE" | cut -d'=' -f2)
        echo "$(convert_mode "$mode")"
        ;;
    "/etc/apt/sources.list")
        grep -v '^\s*$' "$FILE"
        ;;
    *)
        head -n 1 "$FILE"
        ;;
    esac
}

convert_mode() {
    case "$1" in
    "0") echo "$(gettext "Base security level")" ;;
    "1") echo "$(gettext "Advanced security level")" ;;
    "2") echo "$(gettext "Maximum security level")" ;;
    *) echo "$(gettext "Unknown mode")" ;;
    esac
}

help() {
    echo "$(gettext "Usage:") $0 $(gettext "[OPTION]")"
    echo "$(gettext "Options:")"
    echo "  -v, --version    $(gettext "Show Astra Linux OS version")"
    echo "  -m, --mode       $(gettext "Show OS security mode")"
    echo "  -b, --build      $(gettext "Show build version")"
    echo "  -e, --extended   $(gettext "Show extended repository version")"
    echo "  -r, --repository $(gettext "Show APT source list")"
    echo "  -a, --all        $(gettext "Show all the above information")"
    echo "  -h, --help       $(gettext "Show this help message")"
}

brief_help() {
    echo "$(gettext "Usage:") $0 $(gettext "[OPTION]")"
    echo "$(gettext "Try") '$0 --help' $(gettext "for more information.")"
}

show_version() {
    print_file_content "/etc/astra_version" "$(gettext "Astra Linux OS version")" $([ $OPTION_COUNT -gt 1 ] && echo "true" || echo "false")
    print_file_content "/etc/astra_update_version" "$(gettext "Astra Linux OS update version")" $([ $OPTION_COUNT -gt 1 ] && echo "true" || echo "false")
}

show_build() {
    print_file_content "/etc/astra/build_version" "$(gettext "Build version")" $([ $OPTION_COUNT -gt 1 ] && echo "true" || echo "false")
}

show_mode() {
    print_file_content "/etc/astra_license" "$(gettext "OS security mode")" $([ $OPTION_COUNT -gt 1 ] && echo "true" || echo "false")
}

show_extended() {
    print_file_content "/etc/astra/ext_version" "$(gettext "Extended repository version")" $([ $OPTION_COUNT -gt 1 ] && echo "true" || echo "false")
    print_file_content "/etc/astra/ext_build_version" "$(gettext "Extended repository build version")" $([ $OPTION_COUNT -gt 1 ] && echo "true" || echo "false")
    print_file_content "/etc/astra/krea_version" "$(gettext "KREA repository version")" $([ $OPTION_COUNT -gt 1 ] && echo "true" || echo "false")
    print_file_content "/etc/astra/krea_build_version" "$(gettext "KREA repository build version")" $([ $OPTION_COUNT -gt 1 ] && echo "true" || echo "false")
}

show_repository() {
    print_file_content "/etc/apt/sources.list" "$(gettext "APT Source List")" $([ $OPTION_COUNT -gt 1 ] && echo "true" || echo "false")
}

show_all() {
    show_version
    show_build
    show_mode
    show_extended
    show_repository
}

[ $# -eq 0 ] && set -- "-v"

USE_ALL=false
OPTION_COUNT=0
for arg in "$@"; do
    case "$arg" in
    -a | --all)
        USE_ALL=true
        OPTION_COUNT=2
        break
        ;;
    -v | --version | -b | --build | -m | --mode | -e | --extended | -r | --repository)
        OPTION_COUNT=$((OPTION_COUNT + 1))
        ;;
    esac
done

while (($#)); do
    case "$1" in
    -a | --all)
        show_all
        exit 0
        ;;
    -v | --version)
        show_version
        ;;
    -b | --build)
        show_build
        ;;
    -m | --mode)
        show_mode
        ;;
    -e | --extended)
        show_extended
        ;;
    -r | --repository)
        show_repository
        ;;
    -h | --help)
        help
        exit 0
        ;;
    *)
        echo "$(gettext "Invalid option: $1")"
        brief_help
        exit 1
        ;;
    esac
    shift
done
