#!/bin/bash
#########################################################
#                                                       #
# This is BashStyle-NG                                  #
#                                                       #
# Licensed under GNU GENERAL PUBLIC LICENSE v3          #
#                                                       #
# Copyright Christopher Roy Bratušek                    #
#                                                       #
#########################################################

shopt -s nullglob
bsng_nanorc=( "${HOME}"/.nanorc.bs-ng.* )
shopt -u nullglob

if (( "${#bsng_nanorc[@]}" == 0 )); then
    dbg_msg "$(eval_gettext "BashStyle-NG Loading:")" NanoCFG
    export RC_FILE="${HOME}/.nanorc.bs-ng.${BSNG_SESSION_TIME}_${BASH_SESSION_PID}"
    export LK_FILE="/run/user/${UID}/bashstyle-nanorc.lock"

    exec 9>>"${LK_FILE}"
    flock -x 9 || return 1

    if bt "$(ini_get auto_indent)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Auto-Indention "$(eval_gettext "On")"
        rc_add "set autoindent"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Auto-Indention "$(eval_gettext "Off")"
        rc_add "unset autoindent"
    fi

    if bt "$(ini_get nano_backup)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Autosave "$(eval_gettext "On")"
        rc_add "set backup"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Autosave "$(eval_gettext "Off")"
        rc_add "unset backup"
    fi

    if bt "$(ini_get bold_text)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Bold-Text "$(eval_gettext "On")"
        rc_add "set boldtext"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Bold-Text "$(eval_gettext "Off")"
        rc_add "unset boldtext"
    fi

    if bt "$(ini_get case_sensitive)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Case-Sensitive "$(eval_gettext "On")"
        rc_add "set casesensitive"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Case-Sensitive "$(eval_gettext "Off")"
        rc_add "unset casesensitive"
    fi

    if bt "$(ini_get show_position)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Show-Position "$(eval_gettext "On")"
        rc_add "set constantshow"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Show-Position "$(eval_gettext "Off")"
        rc_add "unset constantshow"
    fi

    if bt "$(ini_get empty_space)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" More-Space "$(eval_gettext "On")"
        rc_add "unset emptyline"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" More-Space "$(eval_gettext "Off")"
        rc_add "set emptylines"
    fi

    if bt "$(ini_get hide_help)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" No-Help "$(eval_gettext "On")"
        rc_add "set nohelp"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" No-Help "$(eval_gettext "Off")"
        rc_add "unset nohelp"
    fi

    if bt "$(ini_get history)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" History Log: "$(eval_gettext "On")"
        rc_add "set historylog"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" History Log: "$(eval_gettext "Off")"
        rc_add "unset historylog"
    fi

    if bt "$(ini_get rebind_delete)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Rebind Delete: "$(eval_gettext "On")"
        rc_add "set rebinddelete"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Rebind Delete: "$(eval_gettext "Off")"
        rc_add "unset rebinddelete"
    fi

    if bt "$(ini_get enable_mouse)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Enable Mouse: "$(eval_gettext "On")"
        rc_add "set mouse"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Enable Mouse: "$(eval_gettext "Off")"
        rc_add "unset mouse"
    fi

    if bt "$(ini_get no_wrap)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" No Wrap "$(eval_gettext "On")"
        rc_add "set nowrap"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" No Wrap "$(eval_gettext "Off")"
    fi

    if bt "$(ini_get log_position)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Log Position "$(eval_gettext "On")"
        rc_add "set positionlog"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Log Position "$(eval_gettext "Off")"
        rc_add "unset positionlog"
    fi

    dbg_msg "$(eval_gettext "NanoCFG Setting:")" Tab Width "$(ini_get tab_size)"
    rc_add "set tabsize $(ini_get tab_size)"

    if bt "$(ini_get tab_to_spaces)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Tab to spaces "$(eval_gettext "On")"
        rc_add "set tabstospaces"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Tab to spaces "$(eval_gettext "Off")"
        rc_add "unset tabstospaces"
    fi

    if bt "$(ini_get line_numbers)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Line Numbers "$(eval_gettext "On")"
        rc_add "set linenumbers"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Line Numbers "$(eval_gettext "Off")"
        rc_add "unset linenumbers"
    fi

    if [ "$(ini_get guide_stripe)" -gt 0 ]; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Guide Stripe "$(ini_get guide_stripe)"
        rc_add "set guidestripe $(ini_get guide_stripe)"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Guide Stripe "$(eval_gettext "Off")"
    fi

    if bt "$(ini_get use_minibar)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Minibar "$(eval_gettext "On")"
        rc_add "set minibar"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Minibar "$(eval_gettext "Off")"
        rc_add "unset minibar"
    fi

    if bt "$(ini_get smart_home)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Smart Home Key "$(eval_gettext "On")"
        rc_add "set smarthome"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Smart Home Key "$(eval_gettext "Off")"
        rc_add "unset smarthome"
    fi

    if bt "$(ini_get indicator)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Indicator "$(eval_gettext "On")"
        rc_add "set indicator"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Indicator "$(eval_gettext "Off")"
        rc_add "unset indicator"
    fi

    if bt "$(ini_get save_onexit)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" auto save on exit "$(eval_gettext "On")"
        rc_add "set saveonexit"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" auto save on exit "$(eval_gettext "Off")"
        rc_add "unset saveonexit"
    fi

    if bt "$(ini_get trim_blanks)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" trim blanks "$(eval_gettext "On")"
        rc_add "set trimblanks"
    else
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" trim blanks "$(eval_gettext "Off")"
        rc_add "unset trimblanks"
    fi

    if bt "$(ini_get set_uicolors)"; then
        for uipart in function key status title number error selected stripe number mini; do
            uipart_color="$(ini_get ${uipart}_color_fg),$(ini_get ${uipart}_color_bg)"
            dbg_msg "$(eval_gettext "NanoCFG Setting:")" UI Color "${uipart}": "${uipart_color}"
            rc_add "set ${uipart}color ${uipart_color}"
        done

        unset uipart_color uipart
    fi

    if bt "$(ini_get syntax_highlight)"; then
        dbg_msg "$(eval_gettext "NanoCFG Setting:")" Colors "$(eval_gettext "On")"
        for file in /usr/share/nano/*.nanorc; \
            do rc_add "include \"$file\""; \
        done
    else    dbg_msg "$(eval_gettext "NanoCFG Setting:")" Colors "$(eval_gettext "Off")"
    fi

    if [ -s "${RC_FILE}" ]; then
        mv "${RC_FILE}" "${HOME}"/.nanorc
    fi

    unset RC_FILE

    flock -u 9
    exec 9>&-
fi

unset bsng_nanorc
