# shellcheck shell=sh disable=SC3043 # xrc
# Author:       Li Junhao           l@x-cmd.com

xrc awk
xrc:mod:lib ui  getchar region varctl

# Section: define lazy loader
___x_cmd_define_source_lazyloader(){
    local funcname="${1:?Provide function name}"
    local respath="${2:?Provide resource path}"

    eval "$funcname(){
        xrc:mod \"$respath\" && \"$funcname\" \"\$@\"
    }"
}

___x_cmd definelazyloader   ___x_cmd_ui_table           ui/lib/table
___x_cmd definelazyloader   ___x_cmd_ui_select          ui/lib/select
___x_cmd definelazyloader   ___x_cmd_ui_yesno           ui/lib/select
___x_cmd definelazyloader   ___x_cmd_ui_gridselect      ui/lib/gridselect
___x_cmd definelazyloader   ___x_cmd_ui_form            ui/lib/form
___x_cmd definelazyloader   ___x_cmd_ui_tf              ui/lib/truefalse
# ___x_cmd definelazyloader   ___x_cmd_ui_prompt          ui/lib/prompt

___x_cmd definelazyloader   ___x_cmd_ui_rotate1         ui/lib/comp/rotate1
___x_cmd definelazyloader   ___x_cmd_ui_rotate         ui/lib/comp/rotate
# ___x_cmd definelazyloader   ___x_cmd_ui_markdown      ui/lib/markdown

# EndSection

# Section : ui major function and facilities and init
___x_cmd tty update
___x_cmd_ui(){
    local X_help_cmd=; X_help_cmd='x help -m ui' help:arg-null:parse
    local f="$1"; shift
    case "$f" in
        http://* | https://* | ftp://* |ftps://* | git://* )
                                ___x_cmd_ui_url "$f" "$@" ;;
        progressbar|pbar)       ___x_cmd_ui_progressbar "$@" ;;
        cmd|cmdline)            ___x_cmd_ui_cmdline "$@" ;;
        # md|markdown)            ___x_cmd_ui_markdown "$@" ;;
        spin)                   ___x_cmd_ui_spin "$@" ;;
        sep)                    ___x_cmd_ui_sep "$@" ;;
        sep2)                   ___x_cmd_ui_sep "${1:--}" $(( COLUMNS / 2 )) ;;
        sep3)                   ___x_cmd_ui_sep "${1:--}" $(( COLUMNS / 3 )) ;;

        rotate1)                ___x_cmd_ui_rotate1 "$@" ;;
        rotate)                 ___x_cmd_ui_rotate "$@"  ;;
        rotate*)                ___x_cmd_ui_rotate -n "${f#rotate}" "$@" ;;

        table)                  ___x_cmd_ui_table  "$@" ;;
        gridselect)             ___x_cmd_ui_gridselect "$@" ;;
        select)                 ___x_cmd_ui_select "$@" ;;
        yesno)                  ___x_cmd_ui_yesno "$@" ;;       # inside select
        form)                   ___x_cmd_ui_form "$@" ;;
        tf|truefalse)           ___x_cmd_ui_tf "$@" ;;
        # prompt)                 ___x_cmd_ui_prompt "$@" ;;

        col)                    ___x_cmd tty col ;;
        row)                    ___x_cmd tty row ;;
        style)                  ___x_cmd_ui_style "$@" ;;
        *)                      ___x_cmd_ui_style "$f" "$@" ;;
    esac
}

# EndSection

xrc:mod:lib ui      share/style     share/read    share/util

xrc setmain ___x_cmd_ui
