# shellcheck shell=bash

xrc:mod:lib theme       theme_for_transient/_index
theme:transient:load line

___x_cmd_theme_transient(){
    case "$1" in
        on|off|load)
                ___x_cmd_theme_transient_"$1"
                ;;
        cwd)    ___X_CMD_THEME_TRANSIENT_STYLE=cwd ;;
        ps1)    ___X_CMD_THEME_TRANSIENT_PS1="$2" ;;
        *)      N=theme M="Not support option=$1" log:ret:64 ;;
    esac
}


___x_cmd_theme_transient_load(){
    theme:transient:load line

    local x_=; theme:feature:get transient_enable
    case "$x_" in
        always) ___x_cmd_theme_transient on  ;;
        never)  ___x_cmd_theme_transient off ;;
        *)      [ -z "$___X_CMD_THEME_DEV_MOD" ] || ___x_cmd_theme_transient on ;;
    esac

    theme:feature:get transient_cwd
    case "$x_" in
        never)  ___X_CMD_THEME_TRANSIENT_STYLE=""   ;;
        *)      ___X_CMD_THEME_TRANSIENT_STYLE=cwd  ;;
    esac

    # theme:feature:get transient_exectime
    # case "$x_" in
    #     always)         ___x_cmd_theme_exectime on ;;
    # esac
}

___x_cmd_theme_transient_on(){
    [ -n "${ZSH_VERSION}${BASH_VERSION}" ] || return
    [ -z "$___X_CMD_THEME_TRANSIENT_ENABLE" ] || return "$___X_CMD_THEME_TRANSIENT_ENABLE"
    x_replhook_feature="theme feature transient" ___x_cmd replhook_enable || return
    [ -z "$BASH_VERSION" ] || ___x_cmd_replhook_trapint_init       # zsh already init in the replhook code

    export ___X_CMD_THEME_TRANSIENT_OLDPWD="$___X_CMD_THEME_TRANSIENT_OLDPWD"
    export ___X_CMD_THEME_TRANSIENT_PWD="$___X_CMD_THEME_TRANSIENT_PWD"
    export ___X_CMD_THEME_TRANSIENT_UNIT___RESTORE_DONE=1
    ___x_cmd_replhook_preexec_add ___x_cmd_theme_transient_unit___preexec
    ___x_cmd_replhook_precmd_add ___x_cmd_theme_transient_unit___precmd
    ___X_CMD_THEME_TRANSIENT_ENABLE=0

    ___x_cmd_replhook_debug_inside_trapl(){ return 1; }
    case "$___X_CMD_SHELL" in
        bash)   bind -x '"\C-l":___x_cmd_replhook_debug_inside_trapl(){ return 0; }; ___x_cmd_theme_transient_unit___clear; ___x_cmd_replhook_debug_inside_trapl(){ return 1; }' #'
                ;;
        zsh)    zle -N ___x_cmd_theme_transient_widget ___x_cmd_theme_transient_unit___clear
                bindkey '^L' ___x_cmd_theme_transient_widget
                ;;
    esac
}

___x_cmd_theme_transient_off(){
    [ -n "${ZSH_VERSION}${BASH_VERSION}" ] || return
    [ -n "$___X_CMD_THEME_TRANSIENT_ENABLE" ] || return 0
    ___x_cmd_replhook_preexec_rm ___x_cmd_theme_transient_unit___preexec
    ___x_cmd_replhook_precmd_rm  ___x_cmd_theme_transient_unit___precmd
    unset ___X_CMD_THEME_TRANSIENT_ENABLE ___X_CMD_THEME_TRANSIENT_STYLE \
        ___X_CMD_THEME_TRANSIENT_OLDPWD ___X_CMD_THEME_TRANSIENT_PWD \
        ___X_CMD_THEME_TRANSIENT_UNIT___RESTORE_DONE ___X_CMD_THEME_TRANSIENT_UNIT___PRECMD_HISTCMD  \
        ___X_CMD_REPLHOOK_CAPTURE_INTERRUPT ___X_CMD_REPLHOOK_CAPTURE_CLEAR

}

if [ -n "${ZSH_VERSION}${BASH_VERSION}" ]; then
    xrc:mod:lib theme   features/transient_hook
fi
